Initial project import
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
enum JzThemePreference { system, light, dark }
|
||||
|
||||
class ThemeStore extends ChangeNotifier {
|
||||
ThemeStore._();
|
||||
|
||||
static final instance = ThemeStore._();
|
||||
static const _key = 'theme_preference';
|
||||
static const _channel = MethodChannel('com.miaoji/screenshot');
|
||||
|
||||
JzThemePreference _preference = JzThemePreference.system;
|
||||
|
||||
JzThemePreference get preference => _preference;
|
||||
|
||||
ThemeMode get themeMode => switch (_preference) {
|
||||
JzThemePreference.light => ThemeMode.light,
|
||||
JzThemePreference.dark => ThemeMode.dark,
|
||||
JzThemePreference.system => ThemeMode.system,
|
||||
};
|
||||
|
||||
Future<void> initialize() async {
|
||||
final value = (await SharedPreferences.getInstance()).getString(_key);
|
||||
_preference = JzThemePreference.values.firstWhere(
|
||||
(item) => item.name == value,
|
||||
orElse: () => JzThemePreference.system,
|
||||
);
|
||||
await _syncNativeTheme();
|
||||
}
|
||||
|
||||
Future<void> setPreference(JzThemePreference value) async {
|
||||
if (_preference == value) return;
|
||||
_preference = value;
|
||||
notifyListeners();
|
||||
await (await SharedPreferences.getInstance()).setString(_key, value.name);
|
||||
await _syncNativeTheme();
|
||||
}
|
||||
|
||||
Future<void> _syncNativeTheme() async {
|
||||
try {
|
||||
await _channel.invokeMethod<bool>('setThemeMode', {
|
||||
'mode': _preference.name,
|
||||
});
|
||||
} on MissingPluginException {
|
||||
// Native startup themes are Android-only.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user