From fedc5df0c793ab2db03bb82d68c1579aa2d43a69 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Sat, 30 Dec 2023 14:43:16 +0200 Subject: [PATCH] Constant Dark Theme --- lib/app_settings.dart | 9 +++++++- lib/main.dart | 15 ++++++++++++++ lib/storage_manager.dart | 27 ++++++++++++++++++++++++ lib/theme_manager.dart | 45 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 lib/storage_manager.dart create mode 100644 lib/theme_manager.dart diff --git a/lib/app_settings.dart b/lib/app_settings.dart index 71b469c..87d25d7 100644 --- a/lib/app_settings.dart +++ b/lib/app_settings.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:witl/theme_manager.dart'; class Settings extends StatelessWidget { const Settings({super.key}); @@ -7,8 +8,14 @@ class Settings extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: const Text("Settings Screen"), + title: const Text("Settings"), ), + + body: ListView( + children: [ + + ], + ) ); } } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index ceea2bb..cc28018 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,8 +15,23 @@ class MyApp extends StatelessWidget { title: "Entry Point", theme: ThemeData( primarySwatch: Colors.blue, + primaryColor: Colors.white, + brightness: Brightness.light, + dividerColor: Colors.white54, + scaffoldBackgroundColor: Colors.white, ), + darkTheme: ThemeData( + primarySwatch: Colors.blue, + primaryColor: Colors.black, + brightness: Brightness.dark, + dividerColor: Colors.black12, + scaffoldBackgroundColor: Color(0xFF131313), + + ), + + themeMode: ThemeMode.system, + // Navigashun with Routes // Base "Home" Route initialRoute: '/', diff --git a/lib/storage_manager.dart b/lib/storage_manager.dart new file mode 100644 index 0000000..b0acb3e --- /dev/null +++ b/lib/storage_manager.dart @@ -0,0 +1,27 @@ +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 new file mode 100644 index 0000000..abf8aac --- /dev/null +++ b/lib/theme_manager.dart @@ -0,0 +1,45 @@ +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