Files
unionflow-mobile-apps/lib/core/theme/theme_provider.dart
2026-03-31 09:14:47 +00:00

43 lines
1.2 KiB
Dart

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);
}
}