41 lines
1009 B
Dart
41 lines
1009 B
Dart
import 'package:flutter/material.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
/// Persists and exposes the app theme mode (system | dark).
|
|
class ThemeProvider extends ChangeNotifier {
|
|
static const _key = 'theme_mode';
|
|
ThemeMode _mode = ThemeMode.system;
|
|
|
|
ThemeProvider() {
|
|
_load();
|
|
}
|
|
|
|
ThemeMode get mode => _mode;
|
|
|
|
Future<void> _load() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final v = prefs.getString(_key);
|
|
if (v == 'dark') {
|
|
_mode = ThemeMode.dark;
|
|
} else if (v == 'light') {
|
|
_mode = ThemeMode.light;
|
|
} else {
|
|
_mode = ThemeMode.system;
|
|
}
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> setMode(ThemeMode mode) async {
|
|
_mode = mode;
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setString(
|
|
_key,
|
|
mode == ThemeMode.dark
|
|
? 'dark'
|
|
: mode == ThemeMode.light
|
|
? 'light'
|
|
: 'system');
|
|
notifyListeners();
|
|
}
|
|
}
|