我正在尝试使用 Kotlin Flows 和 Firebase 为我的视图提供实时更新。
这就是我从以下位置收集实时数据的方式ViewModel
:
class MainViewModel(repo: IRepo): ViewModel() {
val fetchVersionCode = liveData(Dispatchers.IO) {
emit(Resource.Loading())
try {
repo.getVersionCode().collect {
emit(it)
}
} catch (e: Exception){
emit(Resource.Failure(e))
Log.e("ERROR:", e.message)
}
}
}
这就是每当 Firebase 中的值发生变化时,我如何从我的存储库中发出每个数据流:
class RepoImpl: IRepo {
override suspend fun getVersionCodeRepo(): Flow<Resource<Int>> = flow {
FirebaseFirestore.getInstance()
.collection("params").document("app").addSnapshotListener { documentSnapshot, firebaseFirestoreException ->
val versionCode = documentSnapshot!!.getLong("version")
emit(Resource.Success(versionCode!!.toInt()))
}
}
问题是当我使用时:
emit(Resource.Success(versionCode!!.toInt()))
Android Studio 使用以下命令突出显示发出调用:
挂起函数 'emit' 只能从协程或另一个挂起函数中调用
但我从CoroutineScope
我的ViewModel
.
这里有什么问题?
谢谢