如何在颤动中删除蜂巢中的所有框?

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));
  

【讨论】:

以上是关于如何在颤动中删除蜂巢中的所有框?的主要内容,如果未能解决你的问题,请参考以下文章

在颤动的蜂巢中按日期检索数据

如何在颤动中使用列中的文本时删除文本溢出

当我在谷歌地图上标记时如何获取地址的所有详细信息。然后它将在颤动中填充文本框

在颤动中打开具有不同适配器的蜂巢盒

Android Studio如何在颤动中删除构建方法中的行

如何在颤动中推动替换删除整个导航堆栈?