我正在尝试创建一个需要从回调中发出值的Flow
,但是由于SAM是常规函数,因此无法调用emit
函数
这是库中带有SAM的类,我不能真正按照需要的方式对其进行修改。
class ValueClass {
fun registerListener(listener: Listener) {
...
}
interface Listener {
fun onNewValue(): String
}
}
这是我创建Flow
对象的看法
class MyClass(private val valueClass: ValueClass) {
fun listenToValue = flow<String> {
valueClass.registerListener { value ->
emit(value) // Suspension functions can only be called on coroutine body
}
}
}
我想如果可以更改ValueClass
会很简单,但是在这种情况下,我做不到。我一直在解决这个问题,并试图寻找实现方法。
至少到目前为止,我知道的一种解决方案是像这样使用GlobalScope
class MyClass(private val valueClass: ValueClass) {
fun listenToValue = flow<String> {
valueClass.registerListener { value ->
GlobalScope.launch {
emit(value)
}
}
}
}
现在,这可行,但是我不想使用GlobalScope
,因为我将使用viewModelScope
将其绑定到应用程序的生命周期。
有什么办法可以解决这个问题?
先谢谢了。任何帮助将不胜感激!