Support core status check and force restart Optimize proxies page and access page Update flutter and pub dependencies Update go version Optimize more details
61 lines
1.9 KiB
Dart
61 lines
1.9 KiB
Dart
import 'dart:async';
|
|
import 'dart:convert';
|
|
|
|
import 'package:fl_clash/models/models.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
import 'constant.dart';
|
|
|
|
class Preferences {
|
|
static Preferences? _instance;
|
|
Completer<SharedPreferences?> sharedPreferencesCompleter = Completer();
|
|
|
|
Future<bool> get isInit async =>
|
|
await sharedPreferencesCompleter.future != null;
|
|
|
|
Preferences._internal() {
|
|
SharedPreferences.getInstance()
|
|
.then((value) => sharedPreferencesCompleter.complete(value))
|
|
.onError((_, _) => sharedPreferencesCompleter.complete(null));
|
|
}
|
|
|
|
factory Preferences() {
|
|
_instance ??= Preferences._internal();
|
|
return _instance!;
|
|
}
|
|
|
|
Future<ClashConfig?> getClashConfig() async {
|
|
final preferences = await sharedPreferencesCompleter.future;
|
|
final clashConfigString = preferences?.getString(clashConfigKey);
|
|
if (clashConfigString == null) return null;
|
|
final clashConfigMap = json.decode(clashConfigString);
|
|
return ClashConfig.fromJson(clashConfigMap);
|
|
}
|
|
|
|
Future<Config?> getConfig() async {
|
|
final preferences = await sharedPreferencesCompleter.future;
|
|
final configString = preferences?.getString(configKey);
|
|
if (configString == null) return null;
|
|
final configMap = json.decode(configString);
|
|
return Config.compatibleFromJson(configMap);
|
|
}
|
|
|
|
Future<bool> saveConfig(Config config) async {
|
|
final preferences = await sharedPreferencesCompleter.future;
|
|
return await preferences?.setString(configKey, json.encode(config)) ??
|
|
false;
|
|
}
|
|
|
|
Future<void> clearClashConfig() async {
|
|
final preferences = await sharedPreferencesCompleter.future;
|
|
preferences?.remove(clashConfigKey);
|
|
}
|
|
|
|
Future<void> clearPreferences() async {
|
|
final sharedPreferencesIns = await sharedPreferencesCompleter.future;
|
|
sharedPreferencesIns?.clear();
|
|
}
|
|
}
|
|
|
|
final preferences = Preferences();
|