flutter 未找到Box,是否忘记调用Hive.openBox()?

pdkcd3nj  于 2023-01-10  发布在  Flutter
关注(0)|答案(2)|浏览(214)

在flutter中使用HIVE数据库时,如果您遇到如下错误:

"未找到框。是否忘记调用Hive.openBox()?"

意思是你还没打开你的盒子
要解决此问题,请致电

    • 等待配置单元. openBox("boxname");**

使用 Package 盒前

eaf3rand

eaf3rand1#

这意味着您尚未打开 Package 盒。要解决此问题,请致电

await Hive.openBox("boxname");

在使用盒子之前。

vfwfrxfs

vfwfrxfs2#

在开始时、数据库初始化之后或在对盒子执行操作之前,盒子都需要打开。
例如,在我的AppDatabase类中,我只有一个box('book'),我在initialize()方法中打开它,如下所示:
整个应用程序和教程是here

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);
  }

  Future<void> deleteAllBooks() async {
    await _booksBox.clear();
 }
}

相关问题