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')。
您可以使用deleteFromDisk方法。它删除包含该框的文件并关闭该框。
_myCourseBox.deleteFromDisk();
Run Code Online (Sandbox Code Playgroud)
您没有分享任何代码,所以我只举一个例子。
我建议你打开主要功能中的框
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)
| 归档时间: |
|
| 查看次数: |
6957 次 |
| 最近记录: |