You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMP实现commonFlow构建器 适配iOS端CommonFlow调用

Kotlin Multiplatform 中commonFlow顶层构建器实现方案

核心实现

直接复用Kotlin协程原生flow{}构建器的能力,将构建出的原生Flow通过已有的asCommonFlow()扩展包装为CommonFlow返回即可,不需要重新实现流的收集、发射逻辑,完全兼容原生Flow的背压、异常传播、协程取消等所有核心特性:

import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.flow.flow

/**
 * 同原生flow{}构建器用法完全一致,直接返回CommonFlow实例供iOS端直接调用listen方法订阅
 */
fun <T> commonFlow(block: suspend FlowCollector<T>.() -> Unit): CommonFlow<T> {
    return flow(block).asCommonFlow()
}

业务代码使用方式

替换原有业务代码中的flow{}为commonFlow{}即可,返回值直接为CommonFlow类型,不需要额外手动调用asCommonFlow()转换:

class HelpRepository : BaseRepository() {

    fun test(request: AddFeedBackRequest) = commonFlow {

        val feedBackType = if (request.type == AddFeedBackType.Bug) {
            FeedbackType.BUG
        } else {
            FeedbackType.FEEDBACK
        }

        val input = AddFeedbackInput(request.note, Optional.presentIfNotNull(feedBackType))

        emit(true)

        val mutation = AddFeedbackMutation(input)
        val response = executeMutation(mutation)

        emit(false)
    }
}

扩展适配其他流构建场景

如果需要将其他原生Flow构建器也适配为返回CommonFlow类型,实现逻辑完全一致,直接包装对应原生构建器的返回值即可:

import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.ProducerScope

// 适配固定值流构建
fun <T> commonFlowOf(vararg values: T): CommonFlow<T> = flowOf(*values).asCommonFlow()
// 适配回调转流场景
fun <T> commonCallbackFlow(block: suspend ProducerScope<T>.() -> Unit): CommonFlow<T> = callbackFlow(block).asCommonFlow()
// 适配空流场景
fun <T> emptyCommonFlow(): CommonFlow<T> = emptyFlow<T>().asCommonFlow()

注意事项

  • CommonFlow类通过类委托实现了原生Flow接口,所有原生Flow的操作符(map、filter、flowOn、catch、onStart等)都可以正常链式调用,注意经过操作符处理后返回的是原生Flow类型,如果最终需要暴露给iOS端使用,在调用链末尾追加一次.asCommonFlow()转换即可。
  • 原有CommonFlow的listen方法中硬编码了Dispatchers.Main调度器,如果需要支持自定义订阅调度器,可以给listen方法增加可选的CoroutineContext参数,按需传入即可。

内容的提问来源于stack exchange,提问作者ALKIN ÇAKIRALAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:03:16