【发布时间】:2020-06-13 18:34:28
【问题描述】:
我正在尝试显示基于 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 :
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 集合中一样。
【问题讨论】:
-
在最后一个
then的末尾返回_itemList或使用await 代替'then()' -
Firestore.instance.collection("users").document(firebaseUser.uid).get()这将返回一个未来。因此,您的 return 语句return _itemList;在您的then()中发生的所有计算之前被调用。本质上,您的快照数据是空列表。请像 @SanjaySharma 所说的那样使用 await。 -
如何修改为等待?抱歉,我是 Firestore 的新手。 @PrasannaKumar
-
var querySnapshot = await Firestore.instance.collection("users").document(firebaseUser.uid).get();items 查询也是如此
标签: firebase flutter dart google-cloud-firestore