未解决的参考:asLiveData 同时将 Flow 转换为 LiveData

Ser*_*kii 20 android mvvm kotlin

我有以下情况:

这是我的存储库类:

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()))
    }

}
Run Code Online (Sandbox Code Playgroud)

有 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()

}
Run Code Online (Sandbox Code Playgroud)

还有 Result 类:

sealed class Result<out R> {

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

    object Loading : Result<Nothing>()

    object Error : Result<Nothing>()

}
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试在asLiveData方法的帮助下将 Repository 的 Flow 转换为 LiveData 时,带有asLiveData下划线并且工作室写道这是一个未解决的参考。但我不明白为什么会发生,因为存储库返回 Flow。那么,问题是什么,我该如何解决呢?

MrW*_*Man 46

我认为您缺少 LiveData 依赖项。

def lifecycle_version = "2.2.0"

// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
Run Code Online (Sandbox Code Playgroud)

文档


Com*_*are 9

您缺少依赖项:

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
Run Code Online (Sandbox Code Playgroud)

(或任何更高版本)