import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; class UPCache { SharedPreferences? _prefs; static UPCache? _instance; UPCache.of() { init(); } UPCache._pre(SharedPreferences prefs) { _prefs = prefs; } static UPCache getInstance() { _instance ??= UPCache.of(); return _instance!; } void init() async { _prefs ??= await SharedPreferences.getInstance(); } static Future preInit() async { if (_instance == null) { var prefs = await SharedPreferences.getInstance(); _instance = UPCache._pre(prefs); } return _instance!; } void setData(String key, T data) { if (data is String) { _prefs?.setString(key, data); } else if (data is double) { _prefs?.setDouble(key, data); } else if (data is int) { _prefs?.setInt(key, data); } else if (data is bool) { _prefs?.setBool(key, data); } else if (data is List) { _prefs?.setStringList(key, data); } } void setJson(key, value) { value = jsonEncode(value); _prefs?.setString(key, value); } Map? getJson(key) { String? result = _prefs?.getString(key); if (result != null) { return jsonDecode(result); } return null; } void remove(String key) { _prefs?.remove(key); } T? get(String key) { var value = _prefs?.get(key); if (value != null) { return value as T; } return null; } List getStringList(String key) { var value = _prefs?.getStringList(key); if (value != null) { return value; } return []; } }