为什么在Android Jetpack Compose中,基于另一个使用derivedStateOf的mutableState变量的mutableState变量没有改变?

vuktfyat  于 2023-05-27  发布在  Android
关注(0)|答案(1)|浏览(159)

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>()
  }
6jjcrrmo

6jjcrrmo1#

问题是resultListAllMInfoStateFlow,而不是compose中的State。你在derivedStateOf内部调用resultListAllMInfo.value,但是当值改变时不会重新求值,派生状态只能用State来做。

相关问题