-6ren"> -我在 main 中初始化了 box 数据库如下 void main() async { WidgetsFlutterBinding.ensureInitialized(); final-6ren">
gpt4 book ai didi

database - 尝试在 flutter 中访问 Hive 数据库时,框 "contacts"已打开且类型为 Box

转载 作者:行者123 更新时间:2023-12-02 09:47:12 29 4
gpt4 key购买 nike

我在 main 中初始化了 box 数据库如下

void main() async {
WidgetsFlutterBinding.ensureInitialized();
final appDocumentDirectory = await path_provider.getApplicationDocumentsDirectory();
Hive.init(appDocumentDirectory.path);
Hive.registerAdapter(ContactAdapter());
runApp(MyApp());
}
然后我使用 FutureBuilder 插件在 Material 应用程序中打开框,如下所示:
  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 的情况下使用它?
但是后来我必须在不同的小部件中再次打开同一个框才能在其上添加数据。

最佳答案

我跳上这个线程是因为我在使用 resocoder 的 Hive 教程时很难弄清楚如何处理已弃用的 WatchBoxBuilder,谷歌搜索将我带到了这里。

这是我最终使用的:

主要.dart:

void main() async {
if (!kIsWeb) { // <-- I put this here so that I could use Hive in Flutter Web
final dynamic appDocumentDirectory =
await path_provider.getApplicationDocumentsDirectory();
Hive.init(appDocumentDirectory.path as String);
}
Hive.registerAdapter(ContactAdapter());

runApp(child: MyApp());
}

然后 ContactPage() (注意:它与 OP 相同):
Widget _buildListView() {
return 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()),
);
},
);
}
},
);
}

关于database - 尝试在 flutter 中访问 Hive 数据库时,框 "contacts"已打开且类型为 Box<Contact>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60257233/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com