如何删除 Hive Flutter 中的所有框?

Pra*_*r U 1 flutter flutter-hive

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

小智 11

不幸的是,我认为所有(已打开的,加上未打开的)Hive 盒的功能尚未clear()实现。Box 文件基本上以 *.hive 文件的形式放入设备的应用程序文档目录中(压缩文件为 *.hivec,锁定文件为 *.lock)。尽管您可以自己实现这样的 Hive 框并根据需要迭代这些值,但没有单独的键值存储(或 Hive 框)来跟踪以前创建的框。

在您的情况下,如果您只想在一次扫描中删除所有框,一种解决方法可能是将所有 Hive 框放入一个子目录中(使用Hive.initFlutter('chosenPath')),并在必要时使用标准文件操作简单地删除该目录。唯一的问题是您Hive.close()在尝试此操作之前调用关闭所有打开的框(删除不可删除的 *.lock 文件)。

要简化对应用程序文档目录的跨平台引用,您可以使用path_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);
Run Code Online (Sandbox Code Playgroud)

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


Vin*_*ino 9

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

_myCourseBox.deleteFromDisk();
Run Code Online (Sandbox Code Playgroud)


Sel*_*ğlu 6

您没有分享任何代码,所以我只举一个例子。

我建议你打开主要功能中的框

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter();
  Hive.registerAdapter(yourAdapter());
  await Hive.openBox('yourBoxName');
}
Run Code Online (Sandbox Code Playgroud)

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

// It will delete all the entry in the box
Hive.box('yourBoxName').clear();
yourSyncOperation();
Run Code Online (Sandbox Code Playgroud)