Files
MWClash/lib/common/preferences.dart

60 lines
1.9 KiB
Dart
Raw Normal View History

2024-04-30 23:38:49 +08:00
import 'dart:async';
import 'dart:convert';
import 'package:fl_clash/models/models.dart';
2024-04-30 23:38:49 +08:00
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;
2024-04-30 23:38:49 +08:00
Preferences._internal() {
SharedPreferences.getInstance()
.then((value) => sharedPreferencesCompleter.complete(value))
.onError((_, _) => sharedPreferencesCompleter.complete(null));
2024-04-30 23:38:49 +08:00
}
factory Preferences() {
_instance ??= Preferences._internal();
return _instance!;
}
Future<ClashConfig?> getClashConfig() async {
final preferences = await sharedPreferencesCompleter.future;
final clashConfigString = preferences?.getString(clashConfigKey);
2024-04-30 23:38:49 +08:00
if (clashConfigString == null) return null;
final clashConfigMap = json.decode(clashConfigString);
return ClashConfig.fromJson(clashConfigMap);
2024-04-30 23:38:49 +08:00
}
Future<Config?> getConfig() async {
final preferences = await sharedPreferencesCompleter.future;
final configString = preferences?.getString(configKey);
2024-04-30 23:38:49 +08:00
if (configString == null) return null;
final configMap = json.decode(configString);
return Config.compatibleFromJson(configMap);
2024-04-30 23:38:49 +08:00
}
Future<bool> saveConfig(Config config) async {
final preferences = await sharedPreferencesCompleter.future;
return preferences?.setString(configKey, json.encode(config)) ?? false;
}
Future<void> clearClashConfig() async {
final preferences = await sharedPreferencesCompleter.future;
preferences?.remove(clashConfigKey);
2024-04-30 23:38:49 +08:00
}
Future<void> clearPreferences() async {
2024-04-30 23:38:49 +08:00
final sharedPreferencesIns = await sharedPreferencesCompleter.future;
sharedPreferencesIns?.clear();
2024-04-30 23:38:49 +08:00
}
}
final preferences = Preferences();