我正在嘗試使用以下代碼觀察登錄狀態,
@HiltViewModel
class LoginViewModel @Inject constructor(
private val auth: FirebaseAuth,
):ViewModel(){
fun getUser():MutableLiveData<FirebaseUser?>?{
return MutableLiveData(auth.currentUser)
}
}
并在 Fragment 中觀察它
@AndroidEntryPoint
class SettingFragment : Fragment() {
//..
binding.apply {
LoginViewModel.getUser()?.observe(viewLifecycleOwner){
when(it){
null -> isSignedIn = false
else -> isSignedIn = true
}
}
}
//..
}
問題是observe檢測何時FirebaseUser變為null(退出時),但未檢測到何時登錄。
我不知道為什么它會這樣作業..
uj5u.com熱心網友回復:
您的 LiveData 只會產生一個值:
MutableLiveData(auth.currentUser)
即auth.currentUser構造物件時的值(null)。它根本不“聽”任何東西,也不回應用戶身份驗證狀態的任何變化。
如果您想回應身份驗證狀態的變化,您將需要使用AuthStateListener,并使用它的回呼將新值推送到 LiveData。
看:
- https://stackoverflow.com/collectives/google-cloud/articles/68104924/listen-for-authentication-state-in-android
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/479641.html
