flow.collect(suspend (T) -> Unit) 不适用于较新版本的协程依赖项

flow.collect(suspend (T) -> Unit) doesn't work with the newer version of coroutines dependencies

我更新了 gradle 文件

来自

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'

发生的事情是以下函数开始抛出错误。

fun <T> Fragment.collectLifeCycleFlow(flow: Flow<T>, collector: suspend (T) -> Unit) {
    lifecycleScope.launch {
        repeatOnLifecycle(Lifecycle.State.STARTED) {
            flow.collect(collector)
        }
    }
}

但是,它与 flow.collectLatest(collector)

配合使用效果很好

我不知道为什么 collect() 不再接受参数。请帮助我。

Flow.collect 现在采用 FlowCollector 功能接口参数而不是 suspend (T) -> Unit

这个函数一直存在,但它被标记了一个注释,阻止你使用它,并且有一个单独的 collect 扩展函数将 suspend (T) -> Unit 改编成 FlowCollector<T> .现在基本 collect 函数可以公开使用,他们删除了那个扩展函数。好的一面是您不再需要处理必须手动导入扩展功能的问题。之前的行为导致 collect 无法编译,但是 IDE 没有建议如何以简单的方式导入扩展函数。

顺便说一句,你应该在 Fragment 中使用 viewLifecycleOwner

这是您的固定密码:

fun <T> Fragment.collectLifeCycleFlow(flow: Flow<T>, collector: FlowCollector<T>) {
    viewLifecycleOwner.lifecycleScope.launch {
        viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
            flow.collect(collector)
        }
    }
}