68 lines
1.8 KiB
Dart
68 lines
1.8 KiB
Dart
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<void> 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<void> setThemeMode(ThemeMode mode) async {
|
|
if (_themeMode == mode) return;
|
|
|
|
_themeMode = mode;
|
|
notifyListeners();
|
|
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setInt(_themeModeKey, mode.index);
|
|
}
|
|
|
|
Future<void> 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';
|
|
}
|
|
}
|
|
}
|