W ostatnim We / Wy Google Jose Alcerreca i Yigit Boyar powiedzieli nam, że nie powinniśmy już używać LiveData do pobierania danych. Teraz powinniśmy używać funkcji zawieszenia do pobierania jednorazowego i użyć przepływu Kotlina, aby utworzyć strumień danych. Zgadzam się, że coroutines świetnie nadają się do jednorazowego pobierania lub innych operacji CRUD, takich jak wstawianie itp. Ale w przypadkach, gdy potrzebuję strumienia danych, nie rozumiem, jakie korzyści daje mi Flow. Wydaje mi się, że LiveData robi to samo.
Przykład z przepływem:
ViewModel
val items = repository.fetchItems().asLiveData()
Magazyn
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
Przykład z LiveData:
ViewModel
val items = repository.fetchItems()
Magazyn
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
Chciałbym również zobaczyć przykłady projektów wykorzystujących coroutines i Flow do pracy z Roomem lub Modernizacją. Znalazłem tylko próbkę Google do zrobienia ToDo, w której coroutines są używane do jednorazowego pobierania, a następnie ręcznego pobierania danych po zmianie.