从 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 操作是 而非 异步操作。