#android #kotlin #android-livedata
#Android #kotlin #android-livedata
Вопрос:
Рассмотрим простую сопрограмму с LiveData
liveData(viewModelScope.coroutineContext Dispatchers.IO) {
emitSource(repo.fetchUser().map { user ->
// .. Do something
}
}
Ранее до org.jetbrains.kotlin: kotlin-gradle-plugin:1.3.72, это утверждение было выполнено нормально.
Теперь это выдает ошибку
Type mismatch.
Required:
Unit
Found:
DisposableHandle
Если вы видите liveData
функцию в androidx.lifecycle:lifecycle-livedata-ktx:2.2.0
библиотеке,
fun <T> liveData(
context: CoroutineContext = EmptyCoroutineContext,
timeoutInMs: Long = DEFAULT_TIMEOUT,
@BuilderInference block: suspend LiveDataScope<T>.() -> Unit
): LiveData<T> = CoroutineLiveData(context, timeoutInMs, block)
«Блок» возвращает «единицу», что нормально. Однако emitSource
возвращается DisposableHandle
.
Теперь, до Kotlin 1.4, компилятор не жаловался. Теперь внезапно весь мой исходный код пронизан этими ошибками
Это из-за этой новой функции функционального интерфейса в kotlin? DisposableHandle
в нем всего 1 метод. Что изменилось? Кто-нибудь еще сталкивался с этим?
Комментарии:
1. Не удается воспроизвести проблему. Не уверен, поможет ли это, но я использую
ktx
версиюlivedata
зависимости:implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"