我有这个问题,但是当我退出时它一直崩溃。我到处都找不到答案。背景:我有一个存储库,其中包含firebase身份验证所需的所有代码。我已经使用await()函数成功地实现了登录函数,它工作得很完美。问题是你不能在firebase.signOut()函数上使用await(),我认为这是问题所在。请帮助。
fun signIn(email: String, password: String) {
viewModelScope.launch {
repository.signInWithEmailPassword(email, password).collect { response ->
_signInState.value = response
Log.d("tag", response.toString())
}
}
}
fun signOut() {
viewModelScope.launch {
repository.signOut().collect { response ->
_signOutState.value = response
Log.d("tag", response.toString())
}
}
}
主要可组合
fun HomeScreen(viewModel: HomeScreenViewModel) {
val scaffoldState = rememberScaffoldState()
val navController = rememberNavController()
val scope = rememberCoroutineScope()
Scaffold(
scaffoldState = scaffoldState,
drawerContent = { NavDrawer(onSignOutClicked = {viewModel.signOut()})}
) { ....... }
登录工作完美,它不会崩溃。签出函数可以完美地签出,但也会崩溃。
FirebaseAuth#signOut()方法,返回void。所以你不能在
之后调用await()
或任何其他方法auth.signOut()
所以很可能这就是你的应用崩溃的原因。
await()
方法在Kotlin中用于异步操作。这意味着我们可以挂起一个协程,直到操作完成。但请记住,Firebase中的挑出操作是而不是异步的。