Я пытаюсь создать Flow
, который должен выдавать значения из обратного вызова, но я не могу вызвать функцию emit
, поскольку SAM является нормальной функцией
Вот класс с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
}
}
}
Iдумаю, было бы просто, если бы я мог изменить ValueClass
, но в этом случае я не могу. Я оборачиваюсь вокруг этого и пытаюсь найти реализации.
По крайней мере из того, что я знаю, одним из решений было бы использовать GlobalScope
вот так
class MyClass(private val valueClass: ValueClass) {
fun listenToValue = flow<String> {
valueClass.registerListener { value ->
GlobalScope.launch {
emit(value)
}
}
}
}
Теперь это работает, но я не хочу использовать GlobalScope
поскольку я буду использовать viewModelScope
, чтобы связать его с жизненным циклом моего приложения.
Есть ли способ обойти это?
Заранее спасибо. Любая помощь будет принята с благодарностью!