sortByState
是一个mutableState
变量,当sortByState
改变时,resultListAllMInfo
也会改变,测试后没有问题。
而total
变量基于resultListAllMInfo
使用derivedStateOf
方法,我认为它总是得到最新的值,但total是用EResult.LOADING
启动一次的情况。
我的代码有什么问题?
var sortByState by mutableStateOf(ESortBy.START_PRIORITY)
val resultListAllMInfo: StateFlow<EResult<List<MInfo>>> by derivedStateOf {
handelMInfo.listAll(sortByState).stateIn(viewModelScope, SharingStarted.WhileSubscribed(), EResult.LOADING)
}
val total by derivedStateOf {
when (val s = resultListAllMInfo.value) {
is EResult.SUCCESS -> {
log("Success")
s.data.size
}
is EResult.ERROR -> {
log("Error")
0
}
is EResult.LOADING -> {
log("Loading")
0
}
}
}
sealed class EResult<out R> {
data class SUCCESS<out T>(val data: T) : EResult<T>()
data class ERROR(val exception: Exception) : EResult<Nothing>()
object LOADING: EResult<Nothing>()
}
1条答案
按热度按时间6jjcrrmo1#
问题是
resultListAllMInfo
是StateFlow
,而不是compose中的State
。你在derivedStateOf
内部调用resultListAllMInfo.value
,但是当值改变时不会重新求值,派生状态只能用State
来做。