diff --git a/frontend/lib/main.dart b/frontend/lib/main.dart index 95cc867..ad66e04 100644 --- a/frontend/lib/main.dart +++ b/frontend/lib/main.dart @@ -16,7 +16,9 @@ import 'pages/flashcards.dart'; import 'pages/leaderboard.dart'; //import 'pages/settings.dart'; -void main() { +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + final isDark = await loadDarkMode(); runApp( MultiProvider( providers: [ @@ -24,7 +26,7 @@ void main() { create: (_) => QuoteProvider() ), ChangeNotifierProvider( - create: (_) => ThemeProvider() + create: (_) => ThemeProvider(isDark: isDark) ) ], child: HlaskovnikFrontendApp() diff --git a/frontend/lib/pages/list.dart b/frontend/lib/pages/list.dart index dc69c9a..34949dc 100644 --- a/frontend/lib/pages/list.dart +++ b/frontend/lib/pages/list.dart @@ -286,21 +286,22 @@ class ListPage extends StatelessWidget { ), ListTile( title: Text(Strings.userPrefersDarkMode), - onTap: () { themeProvider.setDarkMode(!themeProvider.isDark); }, - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.only(right: Constants.edgeInset), - child: Switch( - onChanged: (value) { - themeProvider.setDarkMode(value); - }, - value: themeProvider.isDark + trailing: Consumer( + builder: (context, themeProvider, _) => Row( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.only(right: Constants.edgeInset), + child: Switch( + onChanged: (value) { + themeProvider.setDarkMode(value); + }, + value: themeProvider.isDark, + ), ), - ), - Icon(Icons.dark_mode), - ], + Icon(Icons.dark_mode), + ], + ), ), ), ], diff --git a/frontend/lib/provider/theme_provider.dart b/frontend/lib/provider/theme_provider.dart index 25e8560..15284f7 100644 --- a/frontend/lib/provider/theme_provider.dart +++ b/frontend/lib/provider/theme_provider.dart @@ -13,22 +13,16 @@ Future loadDarkMode() async { } class ThemeProvider extends ChangeNotifier { - bool _isDark = false; + bool _isDark; bool get isDark => _isDark; - ThemeProvider() { - _load(); // load saved value on startup - } + ThemeProvider({required bool isDark}) : _isDark = isDark; - void _load() async { - _isDark = await loadDarkMode(); - notifyListeners(); - } - - void setDarkMode(bool value) async { + void setDarkMode(bool value) { + if (_isDark == value) return; // avoid unnecessary rebuilds _isDark = value; notifyListeners(); - await saveDarkMode(value); + saveDarkMode(value); } } \ No newline at end of file