diff --git a/firka/lib/helpers/settings/setting.dart b/firka/lib/helpers/settings/setting.dart index 39136695..811de7dd 100644 --- a/firka/lib/helpers/settings/setting.dart +++ b/firka/lib/helpers/settings/setting.dart @@ -26,13 +26,12 @@ const language = 1008; const appIcon = 1009; const childProtection = 1010; const betaWarning = 1011; - const ttToastLessonNo = 1012; const ttToastTestsAndHw = 1013; const ttToastBreaks = 1014; - const statsForNerds = 1015; const developerOptsEnabled = 1016; +const themeBrightness = 1017; bool always() { return true; @@ -245,6 +244,36 @@ class SettingsStore { always), }), isAndroid), + "theme_header": + SettingsHeaderSmall(0, l10n.s_c_theme_header, always), + "theme": SettingsItemsRadio( + themeBrightness, + null, + null, + [ + l10n.s_c_theme_auto, + l10n.s_c_theme_light, + l10n.s_c_theme_dark + ], + 0, + always, () async { + Navigator.of(navigatorKey.currentContext!) + .popUntil((route) => false); + + initTheme(initData); + + Navigator.push( + navigatorKey.currentContext!, + MaterialPageRoute( + builder: (context) => DefaultAssetBundle( + bundle: FirkaBundle(), + child: HomeScreen( + initData, + false, + key: ValueKey('homeScreen'), + ))), + ); + }) }), always), "notifications": SettingsSubGroup( diff --git a/firka/lib/l10n b/firka/lib/l10n index 5056adcc..1b0ccb18 160000 --- a/firka/lib/l10n +++ b/firka/lib/l10n @@ -1 +1 @@ -Subproject commit 5056adcce0ec0fc91b9556bc01d7d37336159409 +Subproject commit 1b0ccb183b4fcc1194688dc30bc1265c7edb701e diff --git a/firka/lib/main.dart b/firka/lib/main.dart index d0fd7fde..f9bb5751 100644 --- a/firka/lib/main.dart +++ b/firka/lib/main.dart @@ -20,6 +20,7 @@ import 'package:firka/ui/phone/screens/home/home_screen.dart'; import 'package:firka/ui/phone/screens/login/login_screen.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:isar/isar.dart'; @@ -126,6 +127,28 @@ void initLang(AppInitialization data) { } } +void initTheme(AppInitialization data) { + final brightness = + SchedulerBinding.instance.platformDispatcher.platformBrightness; + + switch ((data.settings.group("settings").subGroup("customization")["theme"] + as SettingsItemsRadio) + .activeIndex) { + case 1: + appStyle = lightStyle; + break; + case 2: + appStyle = darkStyle; + break; + default: + if (brightness == Brightness.dark) { + appStyle = darkStyle; + } else { + appStyle = lightStyle; + } + } +} + Future initializeApp() async { final isar = await initDB(); final tokenCount = await isar.tokenModels.count(); @@ -172,6 +195,7 @@ Future initializeApp() async { await init.settings.load(init.isar.appSettingsModels); initLang(init); + initTheme(init); init.settings = SettingsStore(init.l10n); await init.settings.load(init.isar.appSettingsModels);