All checks were successful
Release / meta (push) Successful in 8s
Release / linux-build (push) Successful in 56s
Release / web-build (push) Successful in 2m15s
Release / android-build (push) Successful in 6m47s
Release / release-master (push) Successful in 19s
Release / release-dev (push) Successful in 21s
48 lines
1.1 KiB
Dart
48 lines
1.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
class ThemeModeService extends ChangeNotifier {
|
|
static const _prefsKey = 'theme_mode_preference';
|
|
|
|
ThemeMode _mode = ThemeMode.system;
|
|
bool _loaded = false;
|
|
|
|
ThemeMode get mode => _mode;
|
|
bool get isLoaded => _loaded;
|
|
|
|
ThemeModeService() {
|
|
_load();
|
|
}
|
|
|
|
Future<void> _load() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final saved = prefs.getString(_prefsKey);
|
|
if (saved != null) {
|
|
switch (saved) {
|
|
case 'light':
|
|
_mode = ThemeMode.light;
|
|
break;
|
|
case 'dark':
|
|
_mode = ThemeMode.dark;
|
|
break;
|
|
default:
|
|
_mode = ThemeMode.system;
|
|
}
|
|
}
|
|
_loaded = true;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> setMode(ThemeMode mode) async {
|
|
_mode = mode;
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final value = switch (mode) {
|
|
ThemeMode.light => 'light',
|
|
ThemeMode.dark => 'dark',
|
|
_ => 'system',
|
|
};
|
|
await prefs.setString(_prefsKey, value);
|
|
notifyListeners();
|
|
}
|
|
}
|