import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'app_theme.dart'; class ThemeProvider with ChangeNotifier { static const String _themeModeKey = 'user_theme_mode'; static const String _accentKey = 'user_accent_color'; ThemeMode _themeMode = ThemeMode.system; AppAccentColor _accent = AppAccentColor.blue; ThemeMode get themeMode => _themeMode; AppAccentColor get currentAccent => _accent; Color get primaryColor => _accent.color; ThemeData get lightTheme => AppTheme.buildLightTheme(_accent); ThemeData get darkTheme => AppTheme.buildDarkTheme(_accent); ThemeProvider() { loadSettings(); } Future loadSettings() async { final prefs = await SharedPreferences.getInstance(); final modeIndex = prefs.getInt(_themeModeKey); final accentId = prefs.getString(_accentKey); if (modeIndex != null) { _themeMode = ThemeMode.values[modeIndex]; } if (accentId != null) { _accent = AppAccentColor.fromId(accentId); } notifyListeners(); } Future setThemeMode(ThemeMode mode) async { if (_themeMode == mode) return; _themeMode = mode; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setInt(_themeModeKey, mode.index); } Future setAccent(AppAccentColor accent) async { if (_accent.id == accent.id) return; _accent = accent; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setString(_accentKey, accent.id); } String get themeModeName { switch (_themeMode) { case ThemeMode.system: return 'Automatique'; case ThemeMode.light: return 'Clair'; case ThemeMode.dark: return 'Sombre'; } } }