theme_provider.dart
1 import 'package:flutter/material.dart'; 2 import 'package:flutter_riverpod/flutter_riverpod.dart'; 3 import 'package:flutter_secure_storage/flutter_secure_storage.dart'; 4 5 const _themeModeKey = 'theme_mode'; 6 7 /// Provider for the current theme mode 8 final themeModeProvider = StateNotifierProvider<ThemeModeNotifier, ThemeMode>((ref) { 9 return ThemeModeNotifier(); 10 }); 11 12 class ThemeModeNotifier extends StateNotifier<ThemeMode> { 13 final _storage = const FlutterSecureStorage(); 14 15 ThemeModeNotifier() : super(ThemeMode.dark) { 16 _loadThemeMode(); 17 } 18 19 Future<void> _loadThemeMode() async { 20 try { 21 final stored = await _storage.read(key: _themeModeKey); 22 if (stored != null) { 23 state = ThemeMode.values.firstWhere( 24 (m) => m.name == stored, 25 orElse: () => ThemeMode.dark, 26 ); 27 } 28 } catch (e) { 29 // Default to dark mode on error 30 state = ThemeMode.dark; 31 } 32 } 33 34 Future<void> setThemeMode(ThemeMode mode) async { 35 state = mode; 36 try { 37 await _storage.write(key: _themeModeKey, value: mode.name); 38 } catch (e) { 39 // Ignore storage errors 40 } 41 } 42 43 Future<void> toggleThemeMode() async { 44 final newMode = state == ThemeMode.dark ? ThemeMode.light : ThemeMode.dark; 45 await setThemeMode(newMode); 46 } 47 }