refactoring
This commit is contained in:
42
lib/core/theme/theme_provider.dart
Normal file
42
lib/core/theme/theme_provider.dart
Normal file
@@ -0,0 +1,42 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// Provider de thème — light / dark avec persistance
|
||||
class ThemeProvider extends ChangeNotifier {
|
||||
static const String _key = 'uf_theme_mode';
|
||||
|
||||
ThemeMode _mode;
|
||||
|
||||
ThemeProvider({ThemeMode initial = ThemeMode.system}) : _mode = initial;
|
||||
|
||||
ThemeMode get mode => _mode;
|
||||
|
||||
bool get isDark => _mode == ThemeMode.dark;
|
||||
|
||||
Future<void> toggle() async {
|
||||
_mode = isDark ? ThemeMode.light : ThemeMode.dark;
|
||||
notifyListeners();
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_key, _mode.name);
|
||||
}
|
||||
|
||||
Future<void> setMode(ThemeMode mode) async {
|
||||
if (_mode == mode) return;
|
||||
_mode = mode;
|
||||
notifyListeners();
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_key, mode.name);
|
||||
}
|
||||
|
||||
/// Charge le thème persisté depuis les préférences
|
||||
static Future<ThemeProvider> load() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final stored = prefs.getString(_key);
|
||||
final mode = switch (stored) {
|
||||
'light' => ThemeMode.light,
|
||||
'dark' => ThemeMode.dark,
|
||||
_ => ThemeMode.system,
|
||||
};
|
||||
return ThemeProvider(initial: mode);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user