У меня есть следующая ситуация:

Вот мой класс репозитория:

import com.mikhailovskii.timesapp.util.Result
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.flow

class LoginRepository {

    fun fetchUser() = flow {
        emit(Result.Loading)
        delay(1000)
        emit(Result.Success((0..20).random()))
    }

}

Есть класс ViewModel:

import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import com.mikhailovskii.timesapp.util.Result

class LoginViewModel() : ViewModel() {

    private val loginRepository = LoginRepository()

    private val a = loginRepository.fetchUser()


    val user: LiveData<Result<Int>> get() = loginRepository.fetchUser().asLiveData()

}

И есть класс результата:

sealed class Result<out R> {

    data class Success<out T>(val data: T) : Result<T>()

    object Loading : Result<Nothing>()

    object Error : Result<Nothing>()

}

Поэтому, когда я пытаюсь преобразовать Поток репозитория в LiveData с помощью метода asLiveData, asLiveData подчеркивается, и студия пишет, что это неразрешенная ссылка. Но я не могу понять, почему это происходит, так как репозиторий возвращает Flow. Итак, какова проблема и как я могу ее решить?

9
Sergei Mikhailovskii 24 Апр 2020 в 23:45

2 ответа

Вам не хватает зависимости:

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"

(или любая более высокая версия)

0
CommonsWare 24 Апр 2020 в 21:20

Я думаю, что вам не хватает зависимости LiveData.

def lifecycle_version = "2.2.0"

// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

Документация

0
MrWeeMan 24 Апр 2020 в 21:41