【问题标题】:Jetpack Compose - Clarification Needed Regarding the MutableStateFlowJetpack Compose - 关于 MutableStateFlow 需要澄清
【发布时间】:2023-01-04 22:20:28
【问题描述】:

大家好,我是 Jetpack Compose 的新手。 需要澄清有关 MutableStateFlow 在 jetpack compose 中的用法。

我在这里使用网络获取状态抽象类,它帮助我确定网络调用的状态。

// Abstract Class

abstract class NetworkFetchState(
 val isLoading: Boolean = false,
 val isSuccess: Boolean = false,
 val isError: Boolean = false,
 val error: Throwable? = null,
 val errorMessage: String? = null
)

我正在创建扩展这个抽象类的数据类

data class LoginDataState(
    val responseData: LoginResponse? = null
) : NetworkFetchState() // extending the Abstract Class

现在在 ViewModel 类中,我正在创建一个可变状态流

class MyViewModel:ViewModel(){
 
    // Mutable State Flow of the Data State
    private val _loginDataState = MutableStateFlow(LoginDataState())

    // readonly value of the __loginDataState
    val loginDataState: StateFlow<LoginDataState> get() = _loginDataState

/*
* Here I am performing network calls inside the view model scope
* based on the result from the network call i am trying to update the MutableStateFlow
*/

  fun makeNetworkCall(){
    // ....
    _loginDataState.update { prevState ->
        prevState.copy(
         // ---- PROBLEM HERE ----
         // isLoading, isSuccess.. etc (all other variables from abstract class)
         // are not available
        )
     }
  }

}

从抽象类扩展的所有成员变量都是不可见的。

我究竟做错了什么?

【问题讨论】:

    标签: android kotlin android-jetpack-compose viewmodel jetpack-compose


    【解决方案1】:

    .copy函数是kotlin编译器为所有数据类生成的函数。根据documentation,它只使用在主构造函数中声明的属性.

    如果您想使用复制功能更改这些属性,则必须以某种方式将它们添加到主构造函数中。

    // this would work
    data class LoginDataState(
        val responseData: LoginResponse? = null,
        val _isLoading: Boolean = false,
    ) : NetworkFetchState(isLoading = _isLoading)
    
    // this is probably better
    interface NetworkFetchState {
        val isLoading: Boolean get() = false
    }
    
    data class LoginDataState(
        val responseData: LoginResponse? = null,
        override val isLoading: Boolean = false,
    ) : NetworkFetchState
    

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多