1

我可以从 Flow 中创建 StateFlow 以便获得它的 .value 吗?有没有办法在不使用 .collect 的情况下做到这一点?

就像是

val myStateFlow = StateFlow<MyDataType>(this.existingFlow)

这样以后,当有人单击按钮时,我可以说出流的最后一个值是多少?

fun handleButton() {
  val lastValue = myStateFlow.value
  print(lastValue)
}

我宁愿不使用收集,因为我不希望流程流动,直到其他人决定收集它。

4

1 回答 1

0

有一个名为stateIn的内置函数。

有没有办法在不使用 .collect 的情况下做到这一点?我宁愿不使用收集,因为我不希望流程流动,直到其他人决定收集它。

如果您使用 的非挂起重载stateIn,则流收集不必立即开始,但您必须为状态提供初始值(因为此调用无法等待流的第一个值,如果它没有) t 暂停)。

在这种情况下,您可以使用started参数来使实际的集合变得惰性,但请注意,访问myStateFlow.value不会触发流的集合,只会一遍又一遍地返回初始值。只有终端流操作符(如collectStateFlow才会真正触发底层流集合,这可能不是您想要的(但也许它是!)。

请注意,如果您想通过myStateFlow.value. 这实际上是stateIn默认情况下所做的:它启动一个收集流以设置StateFlow' 值的协程 - 所以它在技术上使用collect.

于 2021-12-16T10:43:18.377 回答