Введение
Всем привет,
Я создаю функцию получения, которая должна возвращать поток с участниками беседы в чате , когда поток Firestore испускает новое значение .
поток Firestore
Stream<QuerySnapshot> theStream = Firestore.instance.collection("chat").document(uid).collection("participants").snapshots();
, где uid
- уникальный идентификатор диалога.
Участники
Участник определяется Profile
объект (который содержит некоторые полезные поля, такие как имя или фамилия).
class Profile {
String uid;
ImageProvider profilePicture;
String firstName;
String lastName;
String bio;
Profile(this.uid);
Ожидания
Я хочу выполнить некоторые Futures действия внутри моего theStream.map((snapshot) {...})
, как обновление участников firstName
и lastName
при получении участника uid
. Итак, чтобы использовать ключевое слово await
, мне нужно изменить
theStream.map((snapshot) {...})
на
theStream.map((snapshot) async* {...})
Issue
В конце кода я бы объект с типом
Stream<List<Profile>>
, но у меня
Stream<Stream<List<Profile>>>
Мой код
Stream<List<Profile>> get updateParticipants() {
Firestore.instance.collection("chat").document(uid)
.collection("participants")
.snapshots()
.map((participantsSNAP) async* {
var updates = <Future>[];
// Pour chaque valeur du serveur
for (var participantSNAP in participantsSNAP.documentChanges) {
// Pour chaque valeur du cache
for (var i = 0; i < participants.length; i++) {
// Si serveur = cache
if (participantSNAP.document.documentID == participants[i].uid) {
if (participantSNAP.type == DocumentChangeType.removed) {
participants.removeAt(i);
} else if (participantSNAP.type == DocumentChangeType.modified) {
updates.add(participants[i].updateUserProfile());
}
} else if (participantSNAP.type == DocumentChangeType.added) {
participants
.add(Profile(participantSNAP.document.data["participants"]));
updates.add(participants[i].updateUserProfile());
}
}
}
await Future.wait(updates);
participants.sort((profileA, profileB) =>
profileA.firstName.compareTo(profileB.firstName));
return participants
});
Как я могу избежать этого потока в типе потока ?