En la última E / S de Google, Jose Alcerreca y Yigit Boyar nos dijeron que ya no deberíamos usar LiveData para obtener datos. Ahora deberíamos usar las funciones de suspensión para las recuperaciones de una sola vez y usar Kotlin's Flow para crear un flujo de datos. Estoy de acuerdo en que las corutinas son excelentes para la extracción de una sola vez u otras operaciones CRUD, como la inserción, etc. Pero en los casos en que necesito un flujo de datos, no entiendo qué ventajas me ofrece Flow. Me parece que LiveData está haciendo lo mismo.
Ejemplo con flujo:
ViewModel
val items = repository.fetchItems().asLiveData()
Repositorio
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
Ejemplo con LiveData:
ViewModel
val items = repository.fetchItems()
Repositorio
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
También me gustaría ver algunos ejemplos de proyectos que utilizan corutinas y Flow para trabajar con Room o Retrofit. Encontré solo una muestra de ToDo de Google donde las corutinas se usan para la recuperación de una sola vez y luego vuelven a buscar los datos manualmente al cambiar.