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 sharedPreferencesCompleter = Completer(); Future 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 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 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 saveConfig(Config config) async { final preferences = await sharedPreferencesCompleter.future; return preferences?.setString(configKey, json.encode(config)) ?? false; } Future clearClashConfig() async { final preferences = await sharedPreferencesCompleter.future; preferences?.remove(clashConfigKey); } Future clearPreferences() async { final sharedPreferencesIns = await sharedPreferencesCompleter.future; sharedPreferencesIns?.clear(); } } final preferences = Preferences();