Nell'ultimo I / O di Google, Jose Alcerreca e Yigit Boyar ci hanno detto che non dovremmo più utilizzare LiveData per recuperare i dati. Ora dovremmo usare le funzioni di sospensione per i recuperi one-shot e usare Kotlin's Flow per creare un flusso di dati. Concordo sul fatto che le coroutine sono ottime per il recupero di una sola ripresa o altre operazioni CRUD, come l'inserimento, ecc. Ma nei casi in cui ho bisogno di un flusso di dati, non capisco quali vantaggi mi offre Flow. Mi sembra che LiveData stia facendo lo stesso.
Esempio con flusso:
ViewModel
val items = repository.fetchItems().asLiveData()
deposito
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
Esempio con LiveData:
ViewModel
val items = repository.fetchItems()
deposito
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
Vorrei anche vedere alcuni esempi di progetti che utilizzano coroutine e Flow per lavorare con Room o Retrofit. Ho trovato solo un esempio ToDo di Google in cui vengono utilizzate le coroutine per il recupero one-shot e quindi il recupero manuale dei dati al momento della modifica.