123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // ignore_for_file: constant_identifier_names, non_constant_identifier_names
- import 'package:flutter/material.dart';
- import 'package:maxkey_flutter/totp.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- class MaxKeyPersistent {
- static const String _CURR_USER_KEY = "CurrUser";
- static const String _THEME_MODE_KEY = "ThemeMode";
- /// 和用户绑定
- String get _TOKEN_KEY => "$_currUser.Token";
- /// 不和用户绑定
- static const String _HOST_KEY = "Host";
- static const String _DEFAULT_HOST = "192.168.1.66";
- /// 和用户绑定
- String get _TOTP_LIST_KEY => "$_currUser.TotpList";
- /// must call [init] first
- static final MaxKeyPersistent instance = MaxKeyPersistent();
- late SharedPreferences _sp;
- static Future<void> init() async {
- instance._sp = await SharedPreferences.getInstance();
- instance._readTotps();
- }
- ThemeMode get themeMode => switch (_sp.getString(_THEME_MODE_KEY)) {
- "light" => ThemeMode.light,
- "dark" => ThemeMode.dark,
- _ => ThemeMode.system,
- };
- late ValueNotifier<ThemeMode> themeModeListenable = ValueNotifier(themeMode);
- String? get _currUser => _sp.getString(_CURR_USER_KEY);
- String? get token => _sp.getString(_TOKEN_KEY);
- /// example: 192.168.220.26:9527
- String get host => _sp.getString(_HOST_KEY) ?? _DEFAULT_HOST;
- String get baseUrl => "http://$host/sign";
- final List<Totp> _totps = [];
- void _readTotps() {
- final totpUris = _sp.getStringList(_TOTP_LIST_KEY);
- if (totpUris == null) return;
- for (final uri in totpUris) {
- final parsed = Totp.fromUri(uri);
- if (parsed == null) continue;
- _totps.add(parsed);
- }
- }
- List<Totp> get totps => _totps;
- Future<bool> setThemeMode(ThemeMode themeMode) {
- themeModeListenable.value = themeMode;
- return _sp.setString(_THEME_MODE_KEY, themeMode.name);
- }
- Future<bool> setUser(String username) async {
- final result = await _sp.setString(_CURR_USER_KEY, username);
- _totps.clear();
- if (result) {
- instance._readTotps();
- }
- return result;
- }
- Future<bool> setToken(String token) => _sp.setString(_TOKEN_KEY, token);
- /// example: 192.168.220.26:9527
- Future<bool> setHost(String host) => _sp.setString(_HOST_KEY, host);
- Future<bool> saveTotps(List<Totp> totps) => _sp.setStringList(
- _TOTP_LIST_KEY,
- List.generate(totps.length, (i) => totps[i].uri),
- );
- Future<bool> clearToken() => _sp.remove(_TOKEN_KEY);
- }
|