如何删除HiveFlutter中的所有框?

pb3s4cty  于 2021-06-25  发布在  Hive
关注(0)|答案(3)|浏览(362)

我正在开发一个应用程序使用Flutter,它将存储一些数据本地。所以我决定使用hive软件包,这是一个非常棒的软件包来存储数据。所以现在我将在用户按下sync按钮时本地存储所有数据。之后,如果用户再次单击同步,我必须删除所有的框和存储数据可能有或可能没有相同的框名。如果单击同步按钮,我不想增加应用程序存储空间。我想删除所有框,然后再次创建框。

blmhpbnm

blmhpbnm1#

不幸的是,我不认为 clear() 所有(打开的,加上未打开的)Hive都已实现。box文件基本上以*.hive文件的形式放入设备的应用程序文档目录中(压缩文件为*.hivec,锁定文件为*.lock)。没有单独的键值存储(或配置单元框)来跟踪以前创建的框,不过您可以自己实现这样的配置单元框,并根据需要迭代这些值。
在您的情况下,您只需要在一次扫描中删除所有的框,解决方法是将所有的配置单元框放置到一个子目录中(使用 Hive.initFlutter('chosenPath') )并在必要时使用标准文件操作简单地删除目录。只有你打电话给我 Hive.close() 在尝试此操作之前关闭所有打开的框(删除不可删除的*.lock文件)。
为了简化对应用程序文档目录的跨平台引用,可以使用path\u provider包。添加 path_provider: ^1.6.5 你的相依关系 pubspec.yaml ,以及在dart应用程序中的必要位置 import 'package:path_provider/path_provider.dart'; 以及 import 'dart:io'; 用于文件操作;
假设你使用 Hive.initFlutter('chosenPath') 初始化和存储你的Hive。
所以每当你想清除所有的盒子(在确保 Hive.close() 可以使用以下代码:

// Get the application's document directory    
var appDir = await getApplicationDocumentsDirectory(); 

// Get the chosen sub-directory for Hive files
var hiveDb = Directory('${appDir.path}/chosenPath');

// Delete the Hive directory and all its files
hiveDb.delete(recursive: true);

下次调用时,目录将从头开始重新生成 Hive.initFlutter('chosenPath') .

hgncfbus

hgncfbus2#

可以使用deletefromdisk方法。它删除包含该框的文件并关闭该框。

_myCourseBox.deleteFromDisk();
6ss1mwsb

6ss1mwsb3#

你没有共享任何代码,所以我只举一个例子。
我建议你打开主功能的盒子

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter();
  Hive.registerAdapter(yourAdapter());
  await Hive.openBox('yourBoxName');
}

当用户想要同步时,您可以执行以下操作:;

// It will delete all the entry in the box
Hive.box('yourBoxName').clear();
yourSyncOperation();

相关问题