dart Flutter -如何向/从hive添加和检索数据?

juzqafwq  于 2023-01-06  发布在  Flutter
关注(0)|答案(3)|浏览(282)

我知道这听起来很简单,我看了文档中给出的例子,但不知何故,我不能把它做对。
这是我的

void main() async {
  await Hive.initFlutter();
  //Hive.openBox('workoutBox');
  runApp(const MyApp());
}
...

下一屏面:

var box;
...

尝试添加到框中

Future<void> _save() async{
// save doc id somewhere
final Id = doc.id;

//box = await Hive.openBox('workoutBox');
box.put("Id", Id);
}

尝试在另一个函数中检索:

var someId = box.get("Id");

当前错误:对null调用了get
我的困惑是,在这种情况下,你在哪里/如何声明,打开和从盒子里取回?

icnyk63a

icnyk63a1#

您似乎忘记初始化Box参数并将openBox函数返回的值赋给它。
配置单元初始化后,您应该有这样的内容:

Box<myValue> boxValue = await Hive.openBox("myKey");
    • 重要信息**:检索方法将取决于您需要做什么,更重要的是,您首先是如何保存数据的。

假设您像这样保存数据:

await boxValue.add(value);

通过像这样添加数据,分配给该值的键将是一个自动递增的键,因此尝试使用一个从未分配过的特定键检索该值将失败。
如果您添加了如下数据:

await boxValue.put("myKey", value);

那么您将能够使用预期的密钥成功地获取它。

waxmsbnn

waxmsbnn2#

您可以执行以下操作:

void main() async {
  await Hive.initFlutter();
  await Hive.openBox('workoutBox'); //<- make sure you await this
  runApp(const MyApp());
}

...

_save() { // <- can be a synchronous function
  final box = Hive.box('workoutBox'); //<- get an already opened box, no await necessary here
  // save doc id somewhere
  final Id = doc.id;
  box.put("Id", Id);
}
pnwntuvh

pnwntuvh3#

我已经写了an example app和一个Flutter Cubits + Hooks + Hive DB教程,其中有以下AppDatabase类:

const String _bookBox = 'book';

@Singleton()
class AppDatabase {
  AppDatabase._constructor();

  static final AppDatabase _instance = AppDatabase._constructor();

  factory AppDatabase() => _instance;

  late Box<BookDb> _booksBox;

  Future<void> initialize() async {
   await Hive.initFlutter();
   Hive.registerAdapter<BookDb>(BookDbAdapter());
   _booksBox = await Hive.openBox<BookDb>(_bookBox);
 }

 Future<void> saveBook(Book book) async {
   await _booksBox.put(
    book.id,
    BookDb(
      book.id,
      book.title,
      book.author,
      book.publicationDate,
      book.about,
      book.readAlready,
    ));
}

Future<void> deleteBook(int id) async {
  await _booksBox.delete(id);
}
...

相关问题