类型不匹配推断类型是 () -> Unit 但 FlowCollector<Int> 是预期的

Type mismatch inferred type is () -> Unit but FlowCollector<Int> was expected

当尝试从 Flow 中收集类型突然不匹配时,它正在工作然后突然启动。

在我的视图模型中:

class MyViewModel: ViewModel() {

    lateinit var river: Flow<Int>

    fun doStuff() {
        river = flow {
            emit(1)
        }.flowOn(Dispatchers.Default)
        .catch {
            emit(0)
        }
    }
}

然后在我的 activity 我有以下内容:

lifecycleScope.launch {
    viewModel.river.collect { it ->
        // this whole collect is what has the error. 
    }
}

但是collect报错:Type mismatch: inferred type is () -> Unit but FlowCollector<Int> was expected.

怎么会这样?

您可能正在使用 the direct collect() function on Flow

对于您的语法,您需要 import the collect() extension function

(我真的希望他们不要用相同的名字...)

对我来说,解决方案是在 collect:

的末尾加上括号

viewModel.river.collect()

我在尝试从某些数据存储文件中收集多个流时遇到了同样的问题。首先,请确保您已将这两个依赖项导入到您的应用程序级 gradle 文件中。确保替换为合适的版本;

implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")

同步您的 gradle 文件后,导入收集;

import kotlinx.coroutines.flow.collect

您的 collect{ } 现在应该可以正常工作了。