在下面的代码片段中,我如何确保在检查列表包含的内容之前填充senderID列表?我从firestore提取数据,将其存储在列表中,然后检查它是否包含特定的键。
Stream<List<Group>> getChatGroups(String grpId) {
return firestore.collection('groups').snapshots().map((event) {
List<Group> groups = [];
List<String> senderIds = [];
for (var document in event.docs) {
var group = Group.fromMap(document.data());
firestore.collection('groups').doc(group.groupId).collection('chats').get().then((QuerySnapshot snapshot) {
snapshot.docs.forEach((DocumentSnapshot doc) {
var messageData = doc.data() as Map<String, dynamic>;
var messages = Message.fromMap(messageData);
var grId = doc.reference.parent.parent?.id;
//The values in SenderIds should be set before the function below is initiaited
senderIds.add(messages.senderId);
});
});
//This if function should initiate after getting set above
if (senderIds.contains(auth.currentUser!.uid)) {
groups.add(group);
}
}
return groups;
});
}
1条答案
按热度按时间62lalag41#
如果你想让
senderIds.contains
只在所有的Future
完成后被调用,那么构建一个Future
的List
,然后在这个List
上使用Future.wait
。注意,由于上面的代码是异步的,因此还应该使用
asyncMap
而不是map
。