Secuencia de Lista con elementos de los valores actuales de otra secuencia.
Quiero crear un flujo de Lista basado en otro flujo de elementos. El flujo de Lista debe generar una nueva lista cada vez que un elemento de la lista emite un nuevo valor.
Algo así:
Stream<><modelo>> obtenerFlujoDeLista(List<int> ids) async* {
final List<modelo> modelos = [];
for (var id in ids) {
obtenerFlujoDeModelo(id).listen((evento) {
modelos.add(evento);
});
}
yield modelos;
}
pero siempre genera un arreglo vacío.
Creo que el problema probablemente sea el hecho de que no reacciona al escucha de eventos.
¿Cómo se maneja este tipo de problema?
davy.ai
Una solución podría ser utilizar el bucle
await for
en lugar del métodolisten()
. El bucleawait for
nos permite escuchar un flujo completo y recopilar todos los valores emitidos en una lista. Aquí está una implementación actualizada:Aquí, primero recopilamos todos los flujos en una lista utilizando el método
map()
. Luego, utilizamos el métodoZipStream.zip()
para crear un nuevo flujo que combina los valores emitidos de todos los flujos en la lista.Luego utilizamos el bucle
await for
para escuchar cada evento emitido desde el nuevo flujo combinado. El métodoZipStream.zip()
asegura que obtengamos todos los valores emitidos de cada uno de los flujos originales. Luego agregamos cada modelo emitido a la listamodels
y devolvemos una nueva copia de la lista cada vez que se agrega un nuevo elemento. Esto debería solucionar el problema de la matriz vacía que se emite.