0

我正在使用 Hive 在本地存储数据,但是这些框是在整个应用程序中动态创建的,并且不知道总共有多少个框。

当用户按下reset button.

到目前为止,我可以删除所有打开的框或特定框,但不是全部。

有没有办法做到这一点?或者有什么方法可以一次打开所有的盒子?

4

3 回答 3

2

如果要关闭所有打开的框

Hive.close();

如果要从磁盘中删除所有当前打开的框

Hive.deleteFromDisk();
于 2020-03-09T13:12:50.423 回答
0

到目前为止,我必须通过再次创建盒子来存储所有盒子信息来跟踪盒子,并通过读取存储的盒子数量来删除盒子,然后也重置盒子信息。

于 2020-03-09T15:49:44.687 回答
0

我创建了这个扩展:

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));
  }
}
于 2021-04-01T21:00:01.873 回答