import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:sino_med_cloud/core/constants/app_constants.dart'; /// 本地存储管理类 class LocalStorage { static SharedPreferences? _prefs; /// 初始化本地存储 static Future init() async { _prefs ??= await SharedPreferences.getInstance(); } /// 获取 SharedPreferences 实例 static SharedPreferences get prefs { if (_prefs == null) { throw Exception('LocalStorage not initialized. Call LocalStorage.init() first.'); } return _prefs!; } // ==================== String 操作 ==================== /// 保存字符串 static Future setString(String key, String value) async { return await prefs.setString(key, value); } /// 获取字符串 static String? getString(String key, {String? defaultValue}) { return prefs.getString(key) ?? defaultValue; } // ==================== Int 操作 ==================== /// 保存整数 static Future setInt(String key, int value) async { return await prefs.setInt(key, value); } /// 获取整数 static int? getInt(String key, {int? defaultValue}) { return prefs.getInt(key) ?? defaultValue; } // ==================== Double 操作 ==================== /// 保存浮点数 static Future setDouble(String key, double value) async { return await prefs.setDouble(key, value); } /// 获取浮点数 static double? getDouble(String key, {double? defaultValue}) { return prefs.getDouble(key) ?? defaultValue; } // ==================== Bool 操作 ==================== /// 保存布尔值 static Future setBool(String key, bool value) async { return await prefs.setBool(key, value); } /// 获取布尔值 static bool? getBool(String key, {bool? defaultValue}) { return prefs.getBool(key) ?? defaultValue; } // ==================== StringList 操作 ==================== /// 保存字符串列表 static Future setStringList(String key, List value) async { return await prefs.setStringList(key, value); } /// 获取字符串列表 static List? getStringList(String key) { return prefs.getStringList(key); } // ==================== Map 操作 ==================== /// 保存键值对(Map) /// /// [key] 存储的键 /// [value] 要保存的 Map 对象 /// /// 返回保存是否成功 /// /// 示例: /// ```dart /// await LocalStorage.setMap('user', {'name': 'John', 'age': 30}); /// ``` static Future setMap(String key, Map value) async { try { // 将 Map 转换为 JSON 字符串保存 final jsonString = jsonEncode(value); return await prefs.setString(key, jsonString); } catch (e) { // 如果转换失败,返回 false return false; } } /// 获取键值对(Map) /// /// [key] 存储的键 /// [defaultValue] 默认值(可选) /// /// 返回 Map 对象,如果不存在或解析失败则返回 null 或默认值 /// /// 示例: /// ```dart /// final user = LocalStorage.getMap('user'); /// // 返回:{'name': 'John', 'age': 30} /// ``` static Map? getMap(String key, {Map? defaultValue}) { try { final jsonString = prefs.getString(key); if (jsonString == null) { return defaultValue; } // 将 JSON 字符串解析为 Map final decoded = jsonDecode(jsonString) as Map; return decoded; } catch (e) { // 如果解析失败,返回默认值或 null return defaultValue; } } // ==================== 通用操作 ==================== /// 删除指定 key static Future remove(String key) async { return await prefs.remove(key); } /// 清空所有数据 static Future clear() async { return await prefs.clear(); } /// 检查 key 是否存在 static bool containsKey(String key) { return prefs.containsKey(key); } /// 获取所有 key static Set getKeys() { return prefs.getKeys(); } // ==================== 常用业务方法 ==================== /// 保存 Token static Future saveToken(String token) async { return await setString(AppConstants.keyToken, token); } /// 获取 Token static String? getToken() { return getString(AppConstants.keyToken); } /// 删除 Token static Future removeToken() async { return await remove(AppConstants.keyToken); } /// 保存用户信息(JSON 字符串) static Future saveUserInfo(Map userInfo) async { return await setMap(AppConstants.keyUserInfo, userInfo); } /// 获取用户信息 static Map? getUserInfo() { return getMap(AppConstants.keyUserInfo); } /// 删除用户信息 static Future removeUserInfo() async { return await remove(AppConstants.keyUserInfo); } }