import 'package:flutter/material.dart'; import 'package:hive_flutter/hive_flutter.dart'; const String kDataBox = "apidash-data"; const String kKeyDataBoxIds = "ids"; const String kEnvironmentBox = "apidash-environments"; const String kKeyEnvironmentBoxIds = "environmentIds"; const String kHistoryMetaBox = "apidash-history-meta"; const String kHistoryBoxIds = "historyIds"; const String kHistoryLazyBox = "apidash-history-lazy"; const String kSettingsBox = "apidash-settings"; Future openBoxes() async { await Hive.initFlutter(); await Hive.openBox(kDataBox); await Hive.openBox(kSettingsBox); await Hive.openBox(kEnvironmentBox); await Hive.openBox(kHistoryMetaBox); await Hive.openLazyBox(kHistoryLazyBox); } (Size?, Offset?) getInitialSize() { Size? sz; Offset? off; var settingsBox = Hive.box(kSettingsBox); double? w = settingsBox.get("width") as double?; double? h = settingsBox.get("height") as double?; if (w != null && h != null) { sz = Size(w, h); } double? dx = settingsBox.get("dx") as double?; double? dy = settingsBox.get("dy") as double?; if (dx != null && dy != null) { off = Offset(dx, dy); } return (sz, off); } final hiveHandler = HiveHandler(); class HiveHandler { late final Box dataBox; late final Box settingsBox; late final Box environmentBox; late final Box historyMetaBox; late final LazyBox historyLazyBox; HiveHandler() { dataBox = Hive.box(kDataBox); settingsBox = Hive.box(kSettingsBox); environmentBox = Hive.box(kEnvironmentBox); historyMetaBox = Hive.box(kHistoryMetaBox); historyLazyBox = Hive.lazyBox(kHistoryLazyBox); } Map get settings => settingsBox.toMap(); Future saveSettings(Map data) => settingsBox.putAll(data); dynamic getIds() => dataBox.get(kKeyDataBoxIds); Future setIds(List? ids) => dataBox.put(kKeyDataBoxIds, ids); dynamic getRequestModel(String id) => dataBox.get(id); Future setRequestModel( String id, Map? requestModelJson) => dataBox.put(id, requestModelJson); void delete(String key) => dataBox.delete(key); dynamic getEnvironmentIds() => environmentBox.get(kKeyEnvironmentBoxIds); Future setEnvironmentIds(List? ids) => environmentBox.put(kKeyEnvironmentBoxIds, ids); dynamic getEnvironment(String id) => environmentBox.get(id); Future setEnvironment( String id, Map? environmentJson) => environmentBox.put(id, environmentJson); Future deleteEnvironment(String id) => environmentBox.delete(id); dynamic getHistoryIds() => historyMetaBox.get(kHistoryBoxIds); Future setHistoryIds(List? ids) => historyMetaBox.put(kHistoryBoxIds, ids); dynamic getHistoryMeta(String id) => historyMetaBox.get(id); Future setHistoryMeta( String id, Map? historyMetaJson) => historyMetaBox.put(id, historyMetaJson); Future deleteHistoryMeta(String id) => historyMetaBox.delete(id); Future getHistoryRequest(String id) async => await historyLazyBox.get(id); Future setHistoryRequest( String id, Map? historyRequestJsoon) => historyLazyBox.put(id, historyRequestJsoon); Future deleteHistoryRequest(String id) => historyLazyBox.delete(id); Future clear() async { await dataBox.clear(); await environmentBox.clear(); } Future removeUnused() async { var ids = getIds(); if (ids != null) { ids = ids as List; for (var key in dataBox.keys.toList()) { if (key != kKeyDataBoxIds && !ids.contains(key)) { await dataBox.delete(key); } } } var environmentIds = getEnvironmentIds(); if (environmentIds != null) { environmentIds = environmentIds as List; for (var key in environmentBox.keys.toList()) { if (key != kKeyEnvironmentBoxIds && !environmentIds.contains(key)) { await environmentBox.delete(key); } } } } }