liminal
07/07/2022, 5:49 PMuli
07/07/2022, 8:34 PMliminal
07/08/2022, 1:44 PMuli
07/08/2022, 1:53 PMsuspend <T> fun loadData<T>(stateFlow: DataState, dataLoader: suspend () -> T) {
try {
if (stateFlow.value == DataState.Loading) return
stateFlow.value = DataState.Loading
val result = dataLoader()
stateFlow.value = DataState.Loaded(result)
} catch (t: Throwable) {
stateFlow.value = DataState.Error(t)
}
}
Then your actual repository method would go like this:
val topRatedMoviesDataState : DataState<List<Movie>>
suspend fun loadTopRatedMovies() {
loadData(topRatedMoviesDataState, ::loadTopRatedMoviesFromNetwork)
}
And your ViewModel would just subscribe to topRatedMoviesDataState.