我正在尝试对用户在他的个人资料页面上的评论进行排序,但代码无法正常工作,请问这里有什么问题
List<Widget> myComments = [];
posts.data.docs.forEach((post) {
cloudRef.collection('blog').doc(post.id).collection('comments').where('ownerID',isEqualTo:id).get().then((val){
val.docs.forEach((comment) {
myComments.add(CommentCard(replyContent: comment.data()));
});
});
});
return myComments;
答案 0 :(得分:1)
代码的问题在于 forEach
与异步操作一起使用。 forEach
不会等待每个循环的异步操作完成。
使用 for-in
检查此代码更新。我还更新了评论卡列表以使用 .map
,这样您就可以将它放在一个列表中,然后一次性添加所有评论。
List<Widget> myComments = [];
for (var post in posts.data.docs) {
var val = await cloudRef.collection('blog').doc(post.id).collection('comments').where('ownerID',isEqualTo:id).get();
var commentCardList = val.docs.map((comment) => CommentCard(replyContent: comment.data())).toList();
myComments.addAll(commentCardList);
}
return myComments;