我应该使用什么来使用 firestore DB 在 KMM 应用程序上实时刷新数据。
使用 ObserveAsState 与:
userViewModel.userInfo.observeAsState(null).apply {
// view or edit document here
}
与 userInfo LiveData:
val userInfo: LiveData<UserInfo?> = liveData {
try {
emitSource(repo.getUserProfile().flowOn(Dispatchers.IO).asLiveData(Dispatchers.Main))
}catch (_: Exception) { }
}
或者使用collectAsState直接从存储库调用userInfo:
serViewModel.repo.getUserProfile().collectAsState(null).apply {
// view or edit document here
}
存储库中的 getUserProfile() 看起来像这样:
fun getUserProfile(): Flow<UserInfo?> = flow {
firestore.collection("UserInfo").document(auth.currentUser!!.uid).snapshots.collect { user ->
emit(user.data<UserInfo>())
}
}
两个版本都可以,我只是不知道移动设备中实时数据同步最好和最快的是什么。欢迎任何改进。感谢您的帮助!
现代方法是使用 Flows。当您将 Compose 用于 UI 时,您可以使用
collectAsState
(或者当您希望它具有生命周期感知能力时使用
collectAsStateWithLifecycle
)将它们转换为 Compose 状态。