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)
}
}
}
我更新了 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)
}
}
}