【问题标题】:Kotlin Flow - is it possible to add new values on demandKotlin Flow - 是否可以按需添加新值
【发布时间】:2020-04-05 18:41:15
【问题描述】:

是否可以在流创建后为其添加值?

到目前为止,我已经看到了流构建器示例,其中构建器定义了将发出哪些值以及何时发出。但是,如果我需要创建一个流并在生成任何值之前在 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】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 2022-11-17
      • 2012-01-19
      • 2019-05-21
      • 2019-06-07
      相关资源
      最近更新 更多