从 viewModel 调用注销功能时应用程序崩溃
App crashes when signout function is invoked from viewModel
我遇到了这个问题,但是当我注销时它一直崩溃。我无法在任何地方找到答案。
语境:
我有一个存储库,其中包含用于 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()方法,returns无效。因此,您无法在 await()
之后调用 await()
或任何其他方法:
auth.signOut()
这很可能就是您的应用崩溃的原因。
Kotlin中使用await()
方法进行异步操作。这意味着我们可以暂停协程直到操作完成。但请记住,Firebase 中的 sing-out 操作是 而非 异步操作。
我遇到了这个问题,但是当我注销时它一直崩溃。我无法在任何地方找到答案。 语境: 我有一个存储库,其中包含用于 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()方法,returns无效。因此,您无法在 await()
之后调用 await()
或任何其他方法:
auth.signOut()
这很可能就是您的应用崩溃的原因。
Kotlin中使用await()
方法进行异步操作。这意味着我们可以暂停协程直到操作完成。但请记住,Firebase 中的 sing-out 操作是 而非 异步操作。