No último Google I / O, Jose Alcerreca e Yigit Boyar nos disseram que não devemos mais usar o LiveData para buscar dados. Agora devemos usar as funções de suspensão para buscas de uma só vez e usar o Flow de Kotlin para criar um fluxo de dados. Concordo que as corotinas são ótimas para obter buscas de uma só vez ou outras operações CRUD, como inserir etc. etc. Mas nos casos em que preciso de um fluxo de dados, não entendo quais vantagens o Flow me oferece. Parece-me que o LiveData está fazendo o mesmo.
Exemplo com fluxo:
ViewModel
val items = repository.fetchItems().asLiveData()
Repositório
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
Exemplo com LiveData:
ViewModel
val items = repository.fetchItems()
Repositório
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
Eu também gostaria de ver alguns exemplos de projetos usando corotinas e Flow para trabalhar com o Room ou Retrofit. Encontrei apenas uma amostra de ToDo do Google em que as corotinas são usadas para obter uma captura e, em seguida, refazer manualmente os dados sobre alterações.