Ошибка времени компиляции Android при переключении на Kotlin 1.4 при использовании LiveData с сопрограммой

#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"