在flutter中使用HIVE数据库时,如果您遇到如下错误:
"未找到框。是否忘记调用Hive.openBox()?"
意思是你还没打开你的盒子要解决此问题,请致电
使用 Package 盒前
eaf3rand1#
这意味着您尚未打开 Package 盒。要解决此问题,请致电
await Hive.openBox("boxname");
在使用盒子之前。
vfwfrxfs2#
在开始时、数据库初始化之后或在对盒子执行操作之前,盒子都需要打开。例如,在我的AppDatabase类中,我只有一个box('book'),我在initialize()方法中打开它,如下所示:整个应用程序和教程是here。
AppDatabase
initialize()
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(); } }
2条答案
按热度按时间eaf3rand1#
这意味着您尚未打开 Package 盒。要解决此问题,请致电
在使用盒子之前。
vfwfrxfs2#
在开始时、数据库初始化之后或在对盒子执行操作之前,盒子都需要打开。
例如,在我的
AppDatabase
类中,我只有一个box('book'),我在initialize()
方法中打开它,如下所示:整个应用程序和教程是here。