Tengo una consulta de base de datos que devuelve la lista de índices de objetos para un día determinado, es decir:
getIndexesOfDay(day: Day): Flow<List<String>>Ahora, necesito escuchar los detalles de cada índice , por ejemplo:
getDetailsByIndex(index: String): Flow<Details>Entonces, la pregunta es: ¿cómo puedo lograr esto usando Flows?
Dos limitaciones importantes:
Details también deberían actualizar el flujo.Lo que ya he probado:
getIndexesOfDay(todayDay) .map { indexes -> indexes?.map { mIndex-> getDetailsByIndex(mIndex) } } Pero devuelve un Flow<List<Flow<Details>>> en lugar del Flow<List<Details>> deseado
¡Agradezco cualquier ayuda!
No he probado esto, pero creo que debería ser posible usando flatMapLatest() y combine() :
getIndexesOfDay(todayDay) .flatMapLatest { indexes -> combine(indexes.map { getDetailsByIndex(it) }) { it.asList() } } Para cada nueva lista de índices, invoca getDetailsByIndex() varias veces para adquirir una lista de flujos y luego combina estos flujos en un solo flujo de listas de detalles.
El inconveniente es que cada vez que cambian los índices, descarta todos los objetos Flow<Details> , incluso si existiera un índice en la lista de índices nueva y antigua. Probablemente sería mejor crear algún tipo de caché de flujos detallados para cada índice.