初始化一个没有初始值的 kotlin MutableStateFlow

Kra*_*tos 4 android kotlin kotlin-flow

我正在学习 kotlin flow 并慢慢地将我公司应用程序中的代码从 livedata 转换为 kotlin flow。所以我有疑问:

在我的视图模型中,我有这样的 livedata 变量“状态”:

var status: MutableLiveData = MutableLiveData()

我在 MainActivity 中观察到了它。

现在我想用 Flow 做同样的事情。我转换了所有发射/收集部件和其他部件,一切正常,但有一个问题。这是声明我的变量状态的一部分:

var status: MutableStateFlow<Status> = MutableStateFlow() -> 这段代码给出了错误。我需要传递括号中的参数值

所以我必须这样写:

var status: MutableStateFlow<Status> = MutableStateFlow(Status.Failure("adding value even though I don't want to")) 
Run Code Online (Sandbox Code Playgroud)

谁能解释一下,有没有什么方法可以像以前一样在 livedata 中初始化它而不提供初始值?谢谢

Jol*_*MAS 5

你不能,可变的 stateFlow 需要一个初始值。

一种方法是将此值设置为可为空并用 null 初始化它。

但这是一个技巧,还有另一种使用通道并将其作为流接收的方法:

private val _status = Channel<Status>() 
val status = statusChannel.receiveAsFlow()
Run Code Online (Sandbox Code Playgroud)

  • Kotlin Channel 不适用于多个观察者 (4认同)