GOOGLE ADS

lunes, 18 de abril de 2022

¿Cómo asignar un FirestoreStream a una lista de objetos en Flutter?

Quiero crear una transmisión que alimentará los datos automáticamente desde Firestore a una lista. Parece que no puedo obtener la sintaxis correcta. Debe mapear el flujo en una lista de objetos ELEVE.

class FirestoreStream {
final firestoreStream = FirebaseFirestore.instance;
Stream<List<Eleve>> getLiveUpDate({required String account}) async* {
yield* firestoreStream
.collection('familyAccounts')
.doc(account)
.collection('listeEleves')
.doc('mesEleves')
.snapshots()
.map((snapshot) => snapshot.data()!
.map((doc) => Eleve.fromMap(doc)).toList();
}
}

Aquí está la definición de la clase ELEVE:

class Eleve {
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
if (runtimeType!= other.runtimeType) return false;
return other is Eleve && other.email == email;
}
@override
int get hashCode => email.hashCode;
String classeCode;
String email;
String userId;
DateTime dateAjout;
String avatar;
List<ActiviteProf> activites;
List<DefiProf> defis;
List<Message> messages;
Eleve({
required this.classeCode,
required this.email,
required this.userId,
required this.avatar,
required this.dateAjout,
required this.activites,
required this.defis,
required this.messages,
});
Map<String, dynamic> toMap() {
return {
'email': email,
'classeCode': classeCode,
'userId': userId,
'avatar': avatar,
'dateAjout': dateAjout,
'messages': messages.map((e) => e.toMap()).toList(),
};
}
factory Eleve.fromMap(Map data) {
List _messagesMap = data['messages'];
return Eleve(
classeCode: data['classeCode']?? '',
email: data['email']?? '',
userId: data['userId']?? '',
avatar: data['avatar']?? '',
dateAjout: data['dateAjout'].toDate(),
activites: [],
defis: [],
messages: _messagesMap.map((e) => Message.fromMap(e)).toList(),
);
}

La última línea:

.map((doc) => Eleve.fromMap(doc)).toList();

Está Mal. Obtengo "El tipo de retorno 'Eleve' no es un 'MapEntry<_, _>', como lo requiere el contexto del cierre".

¿Alguna idea de lo que está mal?


Solución del problema

Se espera un tipo de devolución de Stream<List> pero en su lugar devuelve Eleve.fromMap(doc)).toList(). Entonces, el método espera una transmisión de List of Eleve pero está devolviendo una List of Eleve.

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...