我正在使用 Hive 在本地存储数据,但是这些框是在整个应用程序中动态创建的,并且不知道总共有多少个框。
当用户按下reset button
.
到目前为止,我可以删除所有打开的框或特定框,但不是全部。
有没有办法做到这一点?或者有什么方法可以一次打开所有的盒子?
我正在使用 Hive 在本地存储数据,但是这些框是在整个应用程序中动态创建的,并且不知道总共有多少个框。
当用户按下reset button
.
到目前为止,我可以删除所有打开的框或特定框,但不是全部。
有没有办法做到这一点?或者有什么方法可以一次打开所有的盒子?
如果要关闭所有打开的框
Hive.close();
如果要从磁盘中删除所有当前打开的框
Hive.deleteFromDisk();
到目前为止,我必须通过再次创建盒子来存储所有盒子信息来跟踪盒子,并通过读取存储的盒子数量来删除盒子,然后也重置盒子信息。
我创建了这个扩展:
import 'dart:async';
import 'dart:io';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
extension on HiveInterface {
/// Get a name list of existing boxes
FutureOr<List<String>> getNamesOfBoxes() async {
final appDir = await getApplicationDocumentsDirectory();
var files = appDir.listSync();
var _list = <String>[];
files.forEach((file) {
if (file.statSync().type == FileSystemEntityType.file
&& p.extension(file.path).toLowerCase() == '.hive') {
_list.add(p.basenameWithoutExtension(file.path));
}
});
print('Current boxes: $_list');
return _list;
}
/* ---------------------------------------------------------------------------- */
/// Delete existing boxes from disk
void deleteBoxes() async {
final _boxes = await this.getNamesOfBoxes();
if (_boxes.isNotEmpty) _boxes.forEach((name) => this.deleteBoxFromDisk(name));
}
}