fix;设置和深浅色
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
const _themeModeKey = 'theme_mode';
|
||||
|
||||
final themeModeProvider = StateNotifierProvider<ThemeModeController, ThemeMode>(
|
||||
(ref) => ThemeModeController(),
|
||||
);
|
||||
|
||||
class ThemeModeController extends StateNotifier<ThemeMode> {
|
||||
ThemeModeController() : super(ThemeMode.system) {
|
||||
unawaited(_loadSavedMode());
|
||||
}
|
||||
|
||||
Future<void> _loadSavedMode() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final raw = prefs.getString(_themeModeKey);
|
||||
if (raw == null) return;
|
||||
state = _decode(raw);
|
||||
}
|
||||
|
||||
Future<void> setMode(ThemeMode mode) async {
|
||||
state = mode;
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_themeModeKey, _encode(mode));
|
||||
}
|
||||
|
||||
ThemeMode _decode(String raw) => switch (raw) {
|
||||
'light' => ThemeMode.light,
|
||||
'dark' => ThemeMode.dark,
|
||||
_ => ThemeMode.system,
|
||||
};
|
||||
|
||||
String _encode(ThemeMode mode) => switch (mode) {
|
||||
ThemeMode.light => 'light',
|
||||
ThemeMode.dark => 'dark',
|
||||
ThemeMode.system => 'system',
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user