2024-04-30 23:38:49 +08:00
|
|
|
import 'dart:async';
|
|
|
|
|
import 'dart:convert';
|
|
|
|
|
|
|
|
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
|
|
|
|
|
|
import '../models/models.dart';
|
|
|
|
|
import 'constant.dart';
|
|
|
|
|
|
|
|
|
|
class Preferences {
|
|
|
|
|
static Preferences? _instance;
|
|
|
|
|
Completer<SharedPreferences> sharedPreferencesCompleter = Completer();
|
|
|
|
|
|
|
|
|
|
Preferences._internal() {
|
|
|
|
|
SharedPreferences.getInstance()
|
|
|
|
|
.then((value) => sharedPreferencesCompleter.complete(value));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
factory Preferences() {
|
|
|
|
|
_instance ??= Preferences._internal();
|
|
|
|
|
return _instance!;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<ClashConfig?> getClashConfig() async {
|
|
|
|
|
final preferences = await sharedPreferencesCompleter.future;
|
2024-05-20 15:15:09 +08:00
|
|
|
final clashConfigString = preferences.getString(clashConfigKey);
|
2024-04-30 23:38:49 +08:00
|
|
|
if (clashConfigString == null) return null;
|
|
|
|
|
final clashConfigMap = json.decode(clashConfigString);
|
|
|
|
|
try {
|
|
|
|
|
return ClashConfig.fromJson(clashConfigMap);
|
|
|
|
|
} catch (e) {
|
2024-05-11 17:02:34 +08:00
|
|
|
throw e.toString();
|
2024-04-30 23:38:49 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<bool> saveClashConfig(ClashConfig clashConfig) async {
|
|
|
|
|
final preferences = await sharedPreferencesCompleter.future;
|
|
|
|
|
return preferences.setString(
|
2024-05-20 15:15:09 +08:00
|
|
|
clashConfigKey,
|
2024-04-30 23:38:49 +08:00
|
|
|
json.encode(clashConfig),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<Config?> getConfig() async {
|
|
|
|
|
final preferences = await sharedPreferencesCompleter.future;
|
2024-05-20 15:15:09 +08:00
|
|
|
final configString = preferences.getString(configKey);
|
2024-04-30 23:38:49 +08:00
|
|
|
if (configString == null) return null;
|
|
|
|
|
final configMap = json.decode(configString);
|
|
|
|
|
try {
|
|
|
|
|
return Config.fromJson(configMap);
|
|
|
|
|
} catch (e) {
|
2024-05-11 17:02:34 +08:00
|
|
|
throw e.toString();
|
2024-04-30 23:38:49 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<bool> saveConfig(Config config) async {
|
|
|
|
|
final preferences = await sharedPreferencesCompleter.future;
|
|
|
|
|
return preferences.setString(
|
2024-05-20 15:15:09 +08:00
|
|
|
configKey,
|
2024-04-30 23:38:49 +08:00
|
|
|
json.encode(config),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
clearPreferences() async {
|
|
|
|
|
final sharedPreferencesIns = await sharedPreferencesCompleter.future;
|
|
|
|
|
sharedPreferencesIns.clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final preferences = Preferences();
|