如何在不使用_的情况下更改状态对象的值



在我的应用程序中,我执行对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-更多细节的真相来源

相关内容

  • 没有找到相关文章

最新更新