From 75e21261dcd582c526abc1f916f0b8a460414b67 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Sat, 30 Dec 2023 15:22:59 +0200 Subject: [PATCH] Theme Changer (Primitive?) --- lib/app_settings.dart | 33 +++++++++++++++++++++++++---- lib/main.dart | 28 ++++++++++++++++++++++--- lib/storage_manager.dart | 27 ------------------------ lib/theme_manager.dart | 45 ---------------------------------------- 4 files changed, 54 insertions(+), 79 deletions(-) delete mode 100644 lib/storage_manager.dart delete mode 100644 lib/theme_manager.dart diff --git a/lib/app_settings.dart b/lib/app_settings.dart index 87d25d7..fa841a4 100644 --- a/lib/app_settings.dart +++ b/lib/app_settings.dart @@ -1,9 +1,16 @@ import 'package:flutter/material.dart'; -import 'package:witl/theme_manager.dart'; +import 'package:witl/main.dart'; -class Settings extends StatelessWidget { +class Settings extends StatefulWidget { const Settings({super.key}); + @override + State createState() => _Settings(); +} + +class _Settings extends State { + late String selectedTheme = 'Dark'; + @override Widget build(BuildContext context) { return Scaffold( @@ -12,8 +19,26 @@ class Settings extends StatelessWidget { ), body: ListView( - children: [ - + children:[ + ListTile( + title: const Text("App Theme"), + subtitle: const Text("Sets the theme of the app between: Dark, Light, System Default."), + trailing: DropdownButton ( + value: selectedTheme, + items: ["Light", "Dark", "System Default"].map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (String? updatedTheme) { + setState(() { + selectedTheme = updatedTheme ?? selectedTheme; + MyApp.of(context).changeTheme(selectedTheme); + }); + }, + ), + ) ], ) ); diff --git a/lib/main.dart b/lib/main.dart index cc28018..52d91a3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,9 +6,18 @@ import 'package:witl/input_data.dart'; void main() => runApp(const MyApp()); -class MyApp extends StatelessWidget { +class MyApp extends StatefulWidget { const MyApp({super.key}); + @override + State createState() => _MyAppState(); + + static _MyAppState of(BuildContext context) => context.findAncestorStateOfType<_MyAppState>()!; +} + +class _MyAppState extends State { + ThemeMode _theme = ThemeMode.system; + @override Widget build(BuildContext context) { return MaterialApp( @@ -26,11 +35,11 @@ class MyApp extends StatelessWidget { primaryColor: Colors.black, brightness: Brightness.dark, dividerColor: Colors.black12, - scaffoldBackgroundColor: Color(0xFF131313), + scaffoldBackgroundColor: const Color(0xFF131313), ), - themeMode: ThemeMode.system, + themeMode: _theme, // Navigashun with Routes // Base "Home" Route @@ -52,4 +61,17 @@ class MyApp extends StatelessWidget { }, ); } + + void changeTheme(String newTheme) { + setState(() { + switch(newTheme) { + case "Light": + _theme = ThemeMode.light; + case "Dark": + _theme = ThemeMode.dark; + case "System Default": + _theme = ThemeMode.system; + } + }); + } } diff --git a/lib/storage_manager.dart b/lib/storage_manager.dart deleted file mode 100644 index b0acb3e..0000000 --- a/lib/storage_manager.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:shared_preferences/shared_preferences.dart'; - -class StorageManager { - static void saveData(String key, dynamic value) async { - final prefs = await SharedPreferences.getInstance(); - if (value is int) { - prefs.setInt(key, value); - } else if (value is String) { - prefs.setString(key, value); - } else if (value is bool) { - prefs.setBool(key, value); - } else { - throw("Invalid Type (Shared Preference Error)"); - } - } - - static Future readData(String key) async { - final prefs = await SharedPreferences.getInstance(); - dynamic obj = prefs.get(key); - return obj; - } - - static Future deleteData(String key) async { - final prefs = await SharedPreferences.getInstance(); - return prefs.remove(key); - } -} \ No newline at end of file diff --git a/lib/theme_manager.dart b/lib/theme_manager.dart deleted file mode 100644 index abf8aac..0000000 --- a/lib/theme_manager.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:witl/storage_manager.dart'; - -class ThemeNotifier with ChangeNotifier { - final darkTheme = ThemeData( - primaryColor: Colors.black, - brightness: Brightness.dark, - dividerColor: Colors.black12, colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.grey).copyWith(background: const Color(0xFF212121)), - ); - - final lightTheme = ThemeData( - primaryColor: Colors.white, - brightness: Brightness.light, - dividerColor: Colors.white54, colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.grey).copyWith(background: const Color(0xFFE5E5E5)), - ); - - late ThemeData _themeData; - ThemeData getTheme() => _themeData; - - ThemeNotifier() { - StorageManager.readData('themeMode').then((value) { - 'value read from storage: ' + value.toString(); - var themeMode = value ?? 'light'; - if (themeMode == 'light') { - _themeData = lightTheme; - } else { - 'setting dark theme'; - _themeData = darkTheme; - } - notifyListeners(); - }); - } - - void setDarkMode() async { - _themeData = darkTheme; - StorageManager.saveData('themeMode', 'dark'); - notifyListeners(); - } - - void setLightMode() async { - _themeData = lightTheme; - StorageManager.saveData('themeMode', 'light'); - notifyListeners(); - } -} \ No newline at end of file