android FirebaseAuth.当前用户是否为流?

2lpgd968  于 2023-02-27  发布在  Android
关注(0)|答案(1)|浏览(126)

我尝试在我的项目中实现Firebase Auth,并且尝试创建一个带有Firebase当前用户的流。但是我无法在视图模型中真实的获取用户。我有两个按钮用于登录和注销,还有一个按钮用于获取当前用户的日志,但是当我登录和注销时,这个变量没有改变。
这在FireBaseAuthService中:

val currentUser: Flow<FirebaseUser?> = flow {
  val user = firebaseAuth.currentUser
  emit(user)
}

此内容位于身份验证存储库中:

val currentUser: Flow<FirebaseUser?> = firebaseAuthService.currentUser

在ViewModel中,我尝试:

private val _currentUser = authRepository.currentUser.asLiveData(viewModelScope.coroutineContext)
val currentUser: LiveData<FirebaseUser?>
get() = _currentUser

以及

init {
    viewModelScope.launch {
        authRepository.currentUser.collect{
            currentUser = it
        }
    }
}
ghhaqwfi

ghhaqwfi1#

要跟踪用户身份验证状态,必须使用FirebaseAuth.AuthStateListener
身份验证状态发生更改时调用的侦听器。
这意味着当用户状态发生变化时,无论是从登录到注销还是从注销到登录,您都会立即收到通知。在这种情况下,当涉及到流时,建议使用callbackFlow。因此,要将用户身份验证状态从存储库权限传播到UI,我将使用以下方法:

override fun getAuthState(viewModelScope: CoroutineScope) = callbackFlow {
    val authStateListener = FirebaseAuth.AuthStateListener { auth ->
        trySend(auth.currentUser == null)
    }
    auth.addAuthStateListener(authStateListener)
    awaitClose {
        auth.removeAuthStateListener(authStateListener)
    }
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), auth.currentUser == null)

相关问题