我在 main 中初始化了 box 数据库,如下所示
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final appDocumentDirectory = await path_provider.getApplicationDocumentsDirectory();
Hive.init(appDocumentDirectory.path);
Hive.registerAdapter(ContactAdapter());
runApp(MyApp());
}
然后我使用 FutureBuilder 插件在材料应用程序中打开框,如下所示:
FutureBuilder(
future: Hive.openBox<Contact>('contacts'),
builder: (context, snapshot) {
if(snapshot.connectionState == ConnectionState.done){
if(snapshot.hasError){
return Text(snapshot.error.toString() );
}
return ContactPage();
} else {
return Scaffold();
}
}
),
在 ContactPage() 里面
我创建了这个:-
ValueListenableBuilder(
valueListenable: Hive.box<Contact>('contacts').listenable(),
builder: (context,Box<Contact> box,_){
if(box.values.isEmpty){
return Text('data is empty');
} else {
return ListView.builder(
itemCount: box.values.length,
itemBuilder: (context,index){
var contact = box.getAt(index);
return ListTile(
title: Text(contact.name),
subtitle: Text(contact.age.toString()),
);
},
);
}
},
)
当我运行应用程序时,出现以下错误
The following HiveError was thrown while handling a gesture: The box "contacts" is already open and of type Box<Contact>.
当我试图在不打开盒子的情况下使用盒子时,我收到错误意味着盒子没有打开。
我必须使用盒子而不在 ValueListenableBuilder 中打开它吗?但随后我必须在不同的小部件中再次打开同一个框以在其上添加数据。