每个异步任务完成后,ListView项如何刷新?
我在Firebase上有2个需要访问的集合,如果有其他方法,请告知,因为我是Firebase和Flutter的新手。
我的users
内部有一个名为favorites
的集合,其中包含userID
字段(与文档ID相同),我将所有用户数据BUT加载到ListView中,而仅将那些匹配该ID(以避免无缘无故地加载1000个用户= $$$)。
根据我的代码和在“运行”窗口上进行的测试,我得到了每个用户的值,但是我在应用程序上的ListView显示为空白。我试图设置一个setstate,但是应用程序不停地刷新。
我试图创建一个单独的函数,但简单地我无法返回文档快照列表。
谢谢
FutureBuilder(
future: Firestore.instance.collection('users').document(id).collection('favorites').getDocuments(),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<DocumentSnapshot> userDocs = [];
snapshot.data.documents.forEach((doc) async {
await Firestore.instance.collection('users').document(doc.documentID).get().then((user) {
userDocs.add(user);
});
});
return ListView(
children: userDocs.map((document) {
return buildItem(context, document);
}).toList(),
);
}
},
),
答案 0 :(得分:0)
所以,经过数周的努力,我终于做到了。
StreamBuilder仅获取收藏夹中的文档:
stream: Firestore.instance.collection('u').document(id).collection('f').snapshots()
ListView.Builder返回一个新的小部件(MessageTile状态小部件)
return MessageTile(ctx: context, doc: snapshot.data.documents[index]);
在Statefull小部件内,我返回一个FutureBuilder<DocumentSnapshot>
,它仅提取与userId匹配的用户:
future: Firestore.instance.collection('u').document(doc['userId']).get()
简单吧? ..