Hive 是一個高效、輕量級的 NoSQL 數據庫,適用于 Flutter 和 Dart 的開發。它以高性能和簡便性著稱,特別適合需要本地存儲的小型到中型數據集的場景:
Hive 的主要特點:
高性能:Hive 是內存映射的數據庫,具有快速的讀寫性能。
輕量級:不依賴于 SQL,數據庫文件小,適合移動端使用 還可以在web端使用。
簡單易用:API 設計簡潔,容易上手。
無需網絡連接:所有數據都保存在本地,適合離線應用。
支持 Dart 對象:Hive 允許直接存儲和讀取 Dart 對象,無需額外的序列化步驟。
添加依賴
hive: ^2.2.3
hive_flutter: ^1.1.0
path_provider: ^2.1.3 #獲取文件儲存位置
封裝
class HiveUtil { HiveUtil._internal(); // 私有的構造方法,防止外部實例化 factory HiveUtil() => _instance; // 工廠方法,返回 HiveUtil 唯一實例 static late final HiveUtil _instance = HiveUtil._internal(); // HiveUtil 唯一實例 static late Box _box; // Hive Box 對象 static Future<HiveUtil> getInstance(String boxName) async { if (!Hive.isBoxOpen(boxName)) { _box = await Hive.openBox(boxName); // 打開 Hive Box 實例 } else { _box = Hive.box(boxName); // 如果已經打開,則獲取實例 } return _instance; } //根據hive刪除整個文件 Future<bool> deleteBox(String boxName) async { try { await Hive.deleteBoxFromDisk(boxName); return true; // 刪除成功 } catch (e) { return false; // 刪除失敗 } } // 根據 key 刪除數據,并返回刪除是否成功 static Future<bool> deleteKey(String key) async { try { await _box.delete(key); // 驗證鍵是否仍存在 bool isDeleted = !_box.containsKey(key); return isDeleted; } catch (e) { return false; // 刪除失敗 } } /// 根據 key 存儲 int 類型 static Future<void> setInt(String key, int value) async { await _box.put(key, value); // 使用 Hive 存儲 int 類型的數據 } /// 根據 key 獲取 int 類型 static int? getInt(String key, {int defaultValue = 0}) { return _box.get(key, defaultValue: defaultValue); // 使用 Hive 獲取 int 類型數據,如果不存在則返回默認值 } /// 根據 key 存儲 double 類型 static Future<void> setDouble(String key, double value) async { await _box.put(key, value); // 使用 Hive 存儲 double 類型的數據 } /// 根據 key 獲取 double 類型 static double? getDouble(String key, {double defaultValue = 0.0}) { return _box.get(key, defaultValue: defaultValue); // 使用 Hive 獲取 double 類型數據,如果不存在則返回默認值 } /// 根據 key 存儲字符串類型 static Future<void> setString(String key, String value) async { await _box.put(key, value); // 使用 Hive 存儲字符串類型的數據 } /// 根據 key 獲取字符串類型 static String? getString(String key, {String defaultValue = ""}) { return _box.get(key, defaultValue: defaultValue); // 使用 Hive 獲取字符串類型數據,如果不存在則返回默認值 } /// 根據 key 存儲布爾類型 static Future<void> setBool(String key, bool value) async { await _box.put(key, value); // 使用 Hive 存儲布爾類型的數據 } /// 根據 key 獲取布爾類型 static bool? getBool(String key, {bool defaultValue = false}) { return _box.get(key, defaultValue: defaultValue); // 使用 Hive 獲取布爾類型數據,如果不存在則返回默認值 } /// 根據 key 存儲字符串類型數組 static Future<void> setStringList(String key, List<String> value) async { await _box.put(key, value); // 使用 Hive 存儲字符串類型數組 } /// 根據 key 獲取字符串類型數組 static List<String> getStringList(String key, {List<String> defaultValue = const []}) { return _box.get(key, defaultValue: defaultValue); // 使用 Hive 獲取字符串類型數組,如果不存在則返回默認值 } /// 根據 key 存儲 Map 類型 static Future<void> setMap(String key, Map<String, dynamic> value) async {
await _box.put( key, json.encode(value)); // 使用 Hive 存儲 Map 類型的數據,將 Map 轉為 json 字符串存儲 } /// 根據 key 獲取 Map 類型 static Map<String, dynamic> getMap(String key) {
String jsonStr = _box.get(key, defaultValue: ""); // 使用 Hive 獲取存儲的 json 字符串 return jsonStr.isEmpty ? {} : json.decode(jsonStr); // 將 json 字符串解碼為 Map 對象,如果 json 為空則返回空 Map 對象 } }
初始化
WidgetsFlutterBinding.ensureInitialized(); //是 Flutter 中一個重要的函數,它確保 Flutter 框架在執行任何其他代碼之前已完成初始化 // 初始化 Hive 并設置存儲路徑 await Hive.initFlutter(); // 打開默認的 Box await HiveUtil.getInstance('myBox'); // await HiveUtil.setInt("INT",13141); runApp(const MyApp()); }
浙公網安備 33010602011771號