34 lines
952 B
Dart
34 lines
952 B
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
|
|
final themeModeProvider =
|
|
StateNotifierProvider<ThemeModeNotifier, ThemeMode>((ref) {
|
|
return ThemeModeNotifier();
|
|
});
|
|
|
|
class ThemeModeNotifier extends StateNotifier<ThemeMode> {
|
|
ThemeModeNotifier() : super(ThemeMode.system) {
|
|
_load();
|
|
}
|
|
|
|
final _storage = const FlutterSecureStorage();
|
|
static const _key = 'theme_mode';
|
|
|
|
Future<void> _load() async {
|
|
final value = await _storage.read(key: _key);
|
|
if (value == 'light') state = ThemeMode.light;
|
|
if (value == 'dark') state = ThemeMode.dark;
|
|
}
|
|
|
|
Future<void> setTheme(ThemeMode mode) async {
|
|
state = mode;
|
|
final value = mode == ThemeMode.light
|
|
? 'light'
|
|
: mode == ThemeMode.dark
|
|
? 'dark'
|
|
: 'system';
|
|
await _storage.write(key: _key, value: value);
|
|
}
|
|
}
|