Colton Idle
01/04/2023, 7:35 AM@HiltViewModel
class MyViewModel @Inject constructor(private val api: MyApi) : ViewModel() {
val state = HomeScreenState()
init {
state.fetchingData = true
viewModelScope.launch {
when (val response = apiService.getItems()) {
is ApiResult.Success -> {
state.items.addAll(response.value)
}
}
state.fetchingData = false
}
}
gildor
01/04/2023, 8:59 AMstate
is mutable, how would client code would know that it updated?
I would probably do something like:
val state: Flow<HomeScreenState> = flow {
emit(HomeScreenState.Loading)
when (val response = apiService.getItems()) {
is ApiResult.Success -> emit(HomeScreenState.Success(response.value))
is Error -> emit(HomeScreenState.Error(…))
}
// Add optional sharing, if you want to preserver result between subscriptions
.shareIn(…)