local_storage.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import 'dart:convert';
  2. import 'package:shared_preferences/shared_preferences.dart';
  3. import 'package:sino_med_cloud/core/constants/app_constants.dart';
  4. /// 本地存储管理类
  5. class LocalStorage {
  6. static SharedPreferences? _prefs;
  7. /// 初始化本地存储
  8. static Future<void> init() async {
  9. _prefs ??= await SharedPreferences.getInstance();
  10. }
  11. /// 获取 SharedPreferences 实例
  12. static SharedPreferences get prefs {
  13. if (_prefs == null) {
  14. throw Exception('LocalStorage not initialized. Call LocalStorage.init() first.');
  15. }
  16. return _prefs!;
  17. }
  18. // ==================== String 操作 ====================
  19. /// 保存字符串
  20. static Future<bool> setString(String key, String value) async {
  21. return await prefs.setString(key, value);
  22. }
  23. /// 获取字符串
  24. static String? getString(String key, {String? defaultValue}) {
  25. return prefs.getString(key) ?? defaultValue;
  26. }
  27. // ==================== Int 操作 ====================
  28. /// 保存整数
  29. static Future<bool> setInt(String key, int value) async {
  30. return await prefs.setInt(key, value);
  31. }
  32. /// 获取整数
  33. static int? getInt(String key, {int? defaultValue}) {
  34. return prefs.getInt(key) ?? defaultValue;
  35. }
  36. // ==================== Double 操作 ====================
  37. /// 保存浮点数
  38. static Future<bool> setDouble(String key, double value) async {
  39. return await prefs.setDouble(key, value);
  40. }
  41. /// 获取浮点数
  42. static double? getDouble(String key, {double? defaultValue}) {
  43. return prefs.getDouble(key) ?? defaultValue;
  44. }
  45. // ==================== Bool 操作 ====================
  46. /// 保存布尔值
  47. static Future<bool> setBool(String key, bool value) async {
  48. return await prefs.setBool(key, value);
  49. }
  50. /// 获取布尔值
  51. static bool? getBool(String key, {bool? defaultValue}) {
  52. return prefs.getBool(key) ?? defaultValue;
  53. }
  54. // ==================== StringList 操作 ====================
  55. /// 保存字符串列表
  56. static Future<bool> setStringList(String key, List<String> value) async {
  57. return await prefs.setStringList(key, value);
  58. }
  59. /// 获取字符串列表
  60. static List<String>? getStringList(String key) {
  61. return prefs.getStringList(key);
  62. }
  63. // ==================== Map 操作 ====================
  64. /// 保存键值对(Map)
  65. ///
  66. /// [key] 存储的键
  67. /// [value] 要保存的 Map 对象
  68. ///
  69. /// 返回保存是否成功
  70. ///
  71. /// 示例:
  72. /// ```dart
  73. /// await LocalStorage.setMap('user', {'name': 'John', 'age': 30});
  74. /// ```
  75. static Future<bool> setMap(String key, Map<String, dynamic> value) async {
  76. try {
  77. // 将 Map 转换为 JSON 字符串保存
  78. final jsonString = jsonEncode(value);
  79. return await prefs.setString(key, jsonString);
  80. } catch (e) {
  81. // 如果转换失败,返回 false
  82. return false;
  83. }
  84. }
  85. /// 获取键值对(Map)
  86. ///
  87. /// [key] 存储的键
  88. /// [defaultValue] 默认值(可选)
  89. ///
  90. /// 返回 Map 对象,如果不存在或解析失败则返回 null 或默认值
  91. ///
  92. /// 示例:
  93. /// ```dart
  94. /// final user = LocalStorage.getMap('user');
  95. /// // 返回:{'name': 'John', 'age': 30}
  96. /// ```
  97. static Map<String, dynamic>? getMap(String key, {Map<String, dynamic>? defaultValue}) {
  98. try {
  99. final jsonString = prefs.getString(key);
  100. if (jsonString == null) {
  101. return defaultValue;
  102. }
  103. // 将 JSON 字符串解析为 Map
  104. final decoded = jsonDecode(jsonString) as Map<String, dynamic>;
  105. return decoded;
  106. } catch (e) {
  107. // 如果解析失败,返回默认值或 null
  108. return defaultValue;
  109. }
  110. }
  111. // ==================== 通用操作 ====================
  112. /// 删除指定 key
  113. static Future<bool> remove(String key) async {
  114. return await prefs.remove(key);
  115. }
  116. /// 清空所有数据
  117. static Future<bool> clear() async {
  118. return await prefs.clear();
  119. }
  120. /// 检查 key 是否存在
  121. static bool containsKey(String key) {
  122. return prefs.containsKey(key);
  123. }
  124. /// 获取所有 key
  125. static Set<String> getKeys() {
  126. return prefs.getKeys();
  127. }
  128. // ==================== 常用业务方法 ====================
  129. /// 保存 Token
  130. static Future<bool> saveToken(String token) async {
  131. return await setString(AppConstants.keyToken, token);
  132. }
  133. /// 获取 Token
  134. static String? getToken() {
  135. return getString(AppConstants.keyToken);
  136. }
  137. /// 删除 Token
  138. static Future<bool> removeToken() async {
  139. return await remove(AppConstants.keyToken);
  140. }
  141. /// 保存用户信息(JSON 字符串)
  142. static Future<bool> saveUserInfo(Map<String, dynamic> userInfo) async {
  143. return await setMap(AppConstants.keyUserInfo, userInfo);
  144. }
  145. /// 获取用户信息
  146. static Map<String, dynamic>? getUserInfo() {
  147. return getMap(AppConstants.keyUserInfo);
  148. }
  149. /// 删除用户信息
  150. static Future<bool> removeUserInfo() async {
  151. return await remove(AppConstants.keyUserInfo);
  152. }
  153. }