Initial project import

This commit is contained in:
2026-07-24 23:11:20 +08:00
commit 6396eabb87
372 changed files with 49682 additions and 0 deletions
@@ -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.
}
}
}