Karim Hassan
08/13/2021, 10:34 AMKViewModel.kt
var errorState by mutableState<Error>(Error(""))
private set
var successState by mutableState<Success>(Success(""))
private set
fetchData(){
viewModelScope.launch {
when(val result = repo.fetchData){
Result.success -> successState = result.data
Result.error -> errorState = result.error
}
}
}
in Screen.kt
@Composable
fun Screen(viewModel : KViewModel ) {
ShowData(viewModel.successState)
ShowError(viewModel.errorState)
}
mcpiroman
08/13/2021, 11:15 AMvar errorState by mutableState<Error?>(null)
private set
//in Screen.kt
@Composable
fun Screen(viewModel : KViewModel ) {
viewModel.error?.let {
ShowError(it)
}
}
Zach Klippenstein (he/him) [MOD]
08/13/2021, 1:41 PMmutableStateOf
doesn’t emit values. It holds state, which means it always has some value, and when that value changes the compose runtime only gets a signal that it changed (not what it changed to) and that it needs to eventually read the state value again.Zach Klippenstein (he/him) [MOD]
08/13/2021, 1:44 PMKarim Hassan
08/13/2021, 3:01 PMAdam Powell
08/13/2021, 3:29 PMAdam Powell
08/13/2021, 3:32 PMKarim Hassan
08/13/2021, 6:29 PMvar result by mutableStateOf<Result<T>>(Result.Success(T))
private set
fetchData(){
viewModelScope.launch {
result = repo.fetchData()
}
}
in Screen.kt
@Composable
fun Screen(viewModel : KViewModel ) {
when(viewModel.result){
is Success -> ShowData(viewModel.result.data)
is Error -> ShowError(viewModel.result.error)
}
}
Karim Hassan
08/13/2021, 6:34 PM