Kotlin Flow-是否可以根据需要添加新值

时间:2020-04-05 18:41:15

标签: kotlin channel flow

创建流后是否可以向流中添加值?

到目前为止,我已经看到了流构建器示例,其中的构建器定义了将发出哪些值以及何时发出的值。但是,如果我需要创建一个流并在生成任何值之前在UI层上订阅它,该怎么办。然后我需要在其他层(例如域)中为其添加值。所以我想我会创建一个空的流程生成器,然后添加值,但是它不起作用。该模型可用于Channels,但我不想使用已弃用的API,请参见下文。我想要一种将域和UI层连接起来并且可以观察到的机制。 Channels的另一个问题是我无法清除其中的数据,最后一个值似乎总是停留在该位置。

private val channel = ConflatedBroadcastChannel<Data>()

override val flow: Flow<Data> = flow {
    channel.consumeEach { data ->
        this.emit(data)
    }
}
override suspend fun setGraph(domainData: Data) {
    channel.send(domainData)
}

1 个答案:

答案 0 :(得分:1)

使用Channel并将其作为Flow公开的想法是正确的,唯一缺少的部分是Channel.asFlow()扩展功能,请参见docs

但是,我认为您的问题是this question的重复,已经是answered。 (我会将其发布为评论,但我没有足够的声誉。)