/ app / lib / providers / theme_provider.dart
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  }