diff --git a/lib/main.dart b/lib/main.dart index 0a7afdc..a29fe66 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 { homePage = const MobileHomePage(title: 'Maid'); } - return MaterialApp( - debugShowCheckedModeBanner: false, - title: 'Maid', - theme: lightTheme, - darkTheme: darkTheme, - themeMode: ThemeMode.dark, - home: homePage, + return Consumer( + builder: (context, themeProvider, child) { + return MaterialApp( + debugShowCheckedModeBanner: false, + title: 'Maid', + theme: lightTheme, + darkTheme: darkTheme, + themeMode: themeProvider.themeMode, + home: homePage + ); + }, ); } } diff --git a/lib/static/theme.dart b/lib/static/theme.dart index 14f5acb..ddeac58 100644 --- a/lib/static/theme.dart +++ b/lib/static/theme.dart @@ -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( diff --git a/lib/widgets/page_bodies/settings_body.dart b/lib/widgets/page_bodies/settings_body.dart index 18196c9..8aaad80 100644 --- a/lib/widgets/page_bodies/settings_body.dart +++ b/lib/widgets/page_bodies/settings_body.dart @@ -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 { 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(context, listen: false).isDarkMode, + onChanged: (value) { + Provider.of(context, listen: false).toggleTheme(); + }, + ), FilledButton( onPressed: () async { var prefs = await SharedPreferences.getInstance(); diff --git a/pubspec.lock b/pubspec.lock index 2555e9c..1b23563 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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: diff --git a/pubspec.yaml b/pubspec.yaml index 6dda7d8..2a17b72 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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