46 lines
1.1 KiB
Dart
46 lines
1.1 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:shared_preferences/shared_preferences.dart';
|
||
|
||
class ThemeService {
|
||
static const _prefKey = 'theme_mode';
|
||
static final ValueNotifier<ThemeMode> notifier = ValueNotifier(
|
||
ThemeMode.system,
|
||
);
|
||
|
||
/// 启动时调用(main.dart)
|
||
static Future<void> init() async {
|
||
final prefs = await SharedPreferences.getInstance();
|
||
final saved = prefs.getString(_prefKey);
|
||
notifier.value = _parse(saved);
|
||
}
|
||
|
||
/// 菜单里调用
|
||
static Future<void> setMode(ThemeMode mode) async {
|
||
notifier.value = mode;
|
||
final prefs = await SharedPreferences.getInstance();
|
||
await prefs.setString(_prefKey, _name(mode));
|
||
}
|
||
|
||
static ThemeMode _parse(String? s) {
|
||
switch (s) {
|
||
case 'light':
|
||
return ThemeMode.light;
|
||
case 'dark':
|
||
return ThemeMode.dark;
|
||
default:
|
||
return ThemeMode.system;
|
||
}
|
||
}
|
||
|
||
static String _name(ThemeMode m) {
|
||
switch (m) {
|
||
case ThemeMode.light:
|
||
return 'light';
|
||
case ThemeMode.dark:
|
||
return 'dark';
|
||
case ThemeMode.system:
|
||
return 'system';
|
||
}
|
||
}
|
||
}
|