如何使用Flatter从firebase实时数据库检索特定数据?
我正在构建一个应用程序,它应该为您创建一个电影库。我已将firebase数据库设置为在数据库中存储电影标题和所有电影规格,如下所示: 我想采取的下一步是只阅读电影标题(官方机密、塞伯格、坚不可摧的金米·施密特),以制作一个列表,向用户显示电影标题。我试着用如何使用Flatter从firebase实时数据库检索特定数据?,firebase,flutter,firebase-realtime-database,dart,Firebase,Flutter,Firebase Realtime Database,Dart,我正在构建一个应用程序,它应该为您创建一个电影库。我已将firebase数据库设置为在数据库中存储电影标题和所有电影规格,如下所示: 我想采取的下一步是只阅读电影标题(官方机密、塞伯格、坚不可摧的金米·施密特),以制作一个列表,向用户显示电影标题。我试着用 void readData() { DBRef.once().then((DataSnapshot datasnapshot){ print('DATA SNAPSHOT NEXT LINE'); prin
void readData()
{
DBRef.once().then((DataSnapshot datasnapshot){
print('DATA SNAPSHOT NEXT LINE');
print(datasnapshot.value);
});
}
但是当我只想要标题的时候,我会抓取firebase数据库中的所有数据。我如何只获取标题?然后,如果用户选择了一个标题,那么我想进入数据库并获取该标题下的所有信息。例如:
void readData()
{
DBRef.child('Official Secrets (2019)').once().then((DataSnapshot datasnapshot)
{
print('DATA SNAPSHOT NEXT LINE');
print(datasnapshot.value);
});
}
我用它来测试只获取电影的标题,但它返回空值。不幸的是,简单的答案是你不能。不使用当前架构。由于数据在RTDB中的组织方式,不可能只获取电影标题而不获取整个节点的子数据 您现在必须做的是数据扁平化,即避免深度嵌套,以避免获取节点的整个数据。这对结构化数据可能有所帮助 您可以创建一个名为
movie\u titles
的附加节点,将所有电影标题保留在那里,并保持reveel house
节点不变
现在,您总是先获取movie\u titles
节点,而不获取所有数据,然后在应用程序中显示标题。当用户点击应用程序中的特定标题时,然后从reveelhouse
节点获取相应的数据
您的数据库可能看起来有点像这样
movie_titles:[
"title 1",
"title 2",
"title 3",
"title 4",
],
reel-house: [
"title 1": {
// data for title 1
},
"title 2": {
// data for title 2
},
"title 3": {
// data for title 3
},
"title 4": {
// data for title 4
},
],
你必须这样做。但是您的数据结构不好
List<String> readData()
{
List<String> titleList = new List()
Map<String,String> map = new Map();
DBRef.once().then((DataSnapshot datasnapshot){
print('DATA SNAPSHOT NEXT LINE');
print(datasnapshot.value);
map = datasnapshot.value();
map.forEach((key,value){
map.add(key);
continue;
})
});
return titleList;
}
List readData()
{
列表标题列表=新列表()
Map Map=newmap();
DBRef.once().then((DataSnapshot DataSnapshot){
打印(“数据快照下一行”);
打印(datasnapshot.value);
map=datasnapshot.value();
map.forEach((键,值){
map.add(键);
继续;
})
});
返回标题列表;
}