firebase - Flutter future builder完成后什么都不显示-firestore
问题描述
我正在尝试显示基于 Firestore 数据库的未来构建器,但现在我得到的只是完成循环进度指示器后的空白屏幕。
任何帮助将不胜感激。
火库功能:
Future<List<Item>> getFavourites() async{
List<Item> _itemList= [];
var firebaseUser=await FirebaseAuth.instance.currentUser();
Firestore.instance.collection("users").document(firebaseUser.uid).get().then((querySnapshot){
List value = querySnapshot.data["favourites"];
if(value.length>0){
value.forEach((element) {
Firestore.instance.collection("items").document(element).get().then((value){
Item item= Item.fromMap(value.data);
_itemList.add(item);
});
});
}
});
return _itemList;
}
未来建造者:
FutureBuilder(
future: getFavourites(),
builder:(BuildContext context,AsyncSnapshot<List<Item>> snapshot){
if(snapshot.connectionState!=ConnectionState.waiting){
//print(snapshot.data[0].name);
return
ListView(
children: <Widget>[
SizedBox(height: 10.0),
Text(
"Favorites",
style: TextStyle(
fontSize: 23,
),
),
SizedBox(height: 10.0),
GridView.builder(
shrinkWrap: true,
primary: false,
physics: NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 1.25),
),
itemCount: snapshot.data == null ? 0 :snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return GridItem(
img: snapshot.data[index].img,
name: snapshot.data[index].name,
category: snapshot.data[index].category,
id: snapshot.data[index].id,
);
},
),
SizedBox(height: 30),
],
);
}
else{
return Center(
child: CircularProgressIndicator(),
);
}
}
),
'Item' 是一个包含所有变量的类,就像在 firestore 集合中一样。
解决方案
使用以下方法:
Future<List<Item>> getFavourites() async{
List<Item> _itemList= [];
var firebaseUser= await FirebaseAuth.instance.currentUser();
DocumentSnapshot snapshot = await Firestore.instance.collection("users").document(firebaseUser.uid).get();
List value = snapshot.data["favourites"];
if(value.length>0){
value.forEach((element) async{
DocumentSnapshot docSnapshot = await Firestore.instance.collection("items").document(element).get();
Item item= Item.fromMap(docSnapshot.data);
_itemList.add(item);
});
}
return _itemList;
}
在FutureBuilder
使用中:
if(snapshot.connectionState==ConnectionState.done){
推荐阅读
- groovy - 指导:将并行增量嵌套循环转换为流
- c# - 是否可以将 asp.net core 2.1 web api 与 sql server 中的现有数据库连接?
- java - getResponseAsStream - InputStream 指向什么?
- sql - 从sql server中的表中获取前n行
- entity-framework - Linq to Entity Group 后跟 Min
- android - 如何在三星的 Android SDK S-Pen Composer 中进行复制、粘贴和剪切
- simulink - 在 Simulink/System Generator 中为黑匣子配置时钟信号
- java - Thymeleaf 无法识别我的字段获取方法
- powershell - Powershell WMI 获取超过 30 天的软件
- python - OpenCV findContours的顺序相反