我试着用stateIn
把几个SharedFlow
组合成一个StateFlow
.但我的StateFlow
似乎没有更新,因为我向它的SharedFlow
源发出了新的价值.我发现问题出在我如何使用stateIn
.
以下是我使用的简化代码(您可以从kotlin playground开始运行它).
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
fun main() = runBlocking {
val sourceFlow = MutableSharedFlow<Int>()
val stateFlow = sourceFlow.stateIn(GlobalScope, SharingStarted.Lazily, 0)
val job = launch { stateFlow.collect() }
sourceFlow.emit(99)
println(stateFlow.value)
job.cancel()
}
println(stateFlow.value)
打印0
,而它应该打印99
.我已经跟踪了this documentation about stateIn个,但仍然找不到问题所在.有人知道我哪里做错了吗?