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

问题描述 投票:2回答:1

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

到目前为止,我已经看到了流构建器示例,其中该构建器定义了将发出哪些值以及何时发出的值。但是,如果我需要创建流并在生成任何值之前在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)
}
kotlin channel flow
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.