在我的应用程序中,我执行对API的请求,该请求应返回布尔值。在ViewModel类中,我有以下两个对象:
private val _isAvailableState = mutableStateOf<Response<Boolean>>(Success(false))
val isAvailableState: State<Response<Boolean>> = _isAvailableState
一个是可变的,另一个不是。以下是我如何读取值:
fun checkAvailability() = viewModelScope.launch {
repository.checkAvailability().collect { response ->
_isAvailableState.value = response
}
}
有没有什么方法可以在不使用此解决方案的情况下更改值?我讨厌使用_(下划线(。
因此,这里唯一的其他解决方案是使用MutableState
的委托语法,并仅将setter设为私有。然而,这也意味着您不再能够绕过状态对象,而是被迫在很早的时候读取值。
var isAvailableState by mutableStateOf<Response<Boolean>>(Success(false))
private set
现在您可以从ViewModel内部调用isAvailableState = response
,但从Composable的角度来看,该字段是只读
由于您使用的是mutableState,因此可以使用以下推荐的方法
var isAvailableState by mutableStateOf<Response<Boolean>>(Success(false))
private set
然后
fun checkAvailability() = viewModelScope.launch {
repository.checkAvailability().collect { response ->
isAvailableState = response //isAvailableState.copy(response= response)
}
}
检查https://developer.android.com/jetpack/compose/state#viewmodels-更多细节的真相来源