Use provider to toggle theme

This commit is contained in:
dane madsen
2023-11-26 20:03:38 +10:00
parent 7a3bd6c904
commit 40b886e5d7
5 changed files with 50 additions and 14 deletions

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:maid/pages/desktop_home.dart';
import 'package:maid/static/memory_manager.dart';
import 'package:maid/static/theme.dart';
@@ -38,13 +39,17 @@ class MaidAppState extends State<MaidApp> {
homePage = const MobileHomePage(title: 'Maid');
}
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Maid',
theme: lightTheme,
darkTheme: darkTheme,
themeMode: ThemeMode.dark,
home: homePage,
return Consumer<ThemeProvider>(
builder: (context, themeProvider, child) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Maid',
theme: lightTheme,
darkTheme: darkTheme,
themeMode: themeProvider.themeMode,
home: homePage
);
},
);
}
}

View File

@@ -1,5 +1,18 @@
import 'package:flutter/material.dart';
class ThemeProvider extends ChangeNotifier {
ThemeMode _themeMode = ThemeMode.dark;
ThemeMode get themeMode => _themeMode;
bool get isDarkMode => _themeMode == ThemeMode.dark;
void toggleTheme() {
_themeMode = _themeMode == ThemeMode.dark ? ThemeMode.light : ThemeMode.dark;
notifyListeners();
}
}
ThemeData lightTheme = ThemeData(
iconTheme: const IconThemeData(color: Colors.black),
textTheme: const TextTheme(

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:maid/static/logger.dart';
import 'package:maid/static/theme.dart';
import 'package:maid/widgets/chat_widgets/code_box.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
class SettingsBody extends StatefulWidget {
@@ -17,13 +18,13 @@ class _SettingsBodyState extends State<SettingsBody> {
return SingleChildScrollView(
child: Column(
children: [
//SwitchListTile(
// title: const Text('Theme (Light/Dark)'),
// value: (true) ? true : false,
// onChanged: (value) {
// // TODO: Fix toggle
// },
//),
SwitchListTile(
title: const Text('Theme (Light/Dark)'),
value: Provider.of<ThemeProvider>(context, listen: false).isDarkMode,
onChanged: (value) {
Provider.of<ThemeProvider>(context, listen: false).toggleTheme();
},
),
FilledButton(
onPressed: () async {
var prefs = await SharedPreferences.getInstance();

View File

@@ -336,6 +336,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.16.4"
nested:
dependency: transitive
description:
name: nested
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
package_config:
dependency: transitive
description:
@@ -472,6 +480,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.7.3"
provider:
dependency: "direct main"
description:
name: provider
sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
url: "https://pub.dev"
source: hosted
version: "6.1.1"
pub_semver:
dependency: transitive
description:

View File

@@ -45,6 +45,7 @@ dependencies:
filesystem_picker: ^4.0.0
http: ^1.1.0
device_info_plus: ^9.1.1
provider: ^6.1.1
dev_dependencies:
msix: ^3.9.1