import 'package:flutter/material.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:shared_preferences/shared_preferences.dart'; part 'theme_provider.g.dart'; const _themeModeKey = 'theme_mode'; @riverpod class ThemeNotifier extends _$ThemeNotifier { @override ThemeMode build() { _loadPersistedThemeMode(); return ThemeMode.system; } Future _loadPersistedThemeMode() async { final prefs = await SharedPreferences.getInstance(); final persisted = prefs.getString(_themeModeKey); if (persisted != null) { state = _themeModeFromString(persisted); } } Future setThemeMode(ThemeMode mode) async { state = mode; final prefs = await SharedPreferences.getInstance(); await prefs.setString(_themeModeKey, _themeModeToString(mode)); } static ThemeMode _themeModeFromString(String? value) { switch (value) { case 'light': return ThemeMode.light; case 'dark': return ThemeMode.dark; case 'system': default: return ThemeMode.system; } } static String _themeModeToString(ThemeMode mode) { switch (mode) { case ThemeMode.light: return 'light'; case ThemeMode.dark: return 'dark'; case ThemeMode.system: return 'system'; } } }