Kotlin MultiPlatform 应用程序中的observeAsState 或collectAsState

问题描述 投票:0回答:1

我应该使用什么来使用 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>()) } }
两个版本都可以,我只是不知道移动设备中实时数据同步最好和最快的是什么。欢迎任何改进。感谢您的帮助!

firebase google-cloud-firestore android-livedata kotlin-multiplatform mutablestateof
1个回答
0
投票
仅当在 Android 中使用具有 XML 布局的旧视图系统时才需要 LiveData。

现代方法是使用 Flows。当您将 Compose 用于 UI 时,您可以使用

collectAsState

(或者当您希望它具有生命周期感知能力时使用 
collectAsStateWithLifecycle
)将它们转换为 Compose 状态。

© www.soinside.com 2019 - 2024. All rights reserved.