如何在颤动中删除蜂巢中的所有框?
Posted
技术标签:
【中文标题】如何在颤动中删除蜂巢中的所有框?【英文标题】:How to delete all the boxes in the hive in flutter? 【发布时间】:2020-06-20 10:01:56 【问题描述】:我使用 Hive 在本地存储数据,但是这些盒子是在整个应用程序中动态创建的,不知道总共有多少盒子。
当用户按下reset button
时,我想删除所有框,无论是打开的还是关闭的。
到目前为止,我可以删除所有打开的框或特定框,但不是全部。
有没有办法做到这一点?或者有什么方法可以一次性打开所有的盒子?
【问题讨论】:
只是好奇为什么他们在 2019 年开始了一个轻量级 Key-Value 数据库的项目并将其命名为 Hive? github.com/hivedb 这是真正的 Hive:hive.apache.org BTW 许可证不允许使用产品名称... 【参考方案1】:如果你想关闭所有打开的盒子
Hive.close();
如果你想从磁盘中删除所有当前打开的盒子
Hive.deleteFromDisk();
【讨论】:
就是,重点,我不知道一共有多少个框,但是想把所有的框都删掉。实际上我是按月存储数据,我不知道每月创建了多少个盒子,但是当用户按下重置选项时,它会删除所有打开的盒子。 如果你想删除所有的盒子你需要调用Hive.deleteFromDisk();
如果你看一下源代码你会看到。 github.com/hivedb/hive/blob/master/hive/lib/src/hive.dart【参考方案2】:
到目前为止,我必须通过再次创建盒子来存储所有盒子信息来跟踪盒子,并通过读取存储的盒子数量来删除盒子,然后也重置盒子信息。
【讨论】:
【参考方案3】:我创建了这个扩展:
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));
【讨论】:
以上是关于如何在颤动中删除蜂巢中的所有框?的主要内容,如果未能解决你的问题,请参考以下文章