1

我创建了一个composable名为 ResolveAuth。ResolveAuth 是用户在 Splash 之后打开应用程序时的第一个屏幕。它所做的只是检查数据存储区中是否存在电子邮件。如果是,则重定向到主屏幕,如果不是,则重定向到教程屏幕

这是我的composableviewmodel代码

@Composable
fun ResolveAuth(resolveAuthViewModel: ResolveAuthViewModel, navController: NavController) {

Scaffold(content = {
    ProgressBar()

    when {
        resolveAuthViewModel.userEmail.value != "" -> {
            navController.navigate(Screen.Main.route) {
                popUpTo(0)
            }
            resolveAuthViewModel.userEmail.value = null
        }
        resolveAuthViewModel.userEmail.value == "" -> {
            navController.navigate(Screen.Tutorial.route) {
                popUpTo(0)
            }
            resolveAuthViewModel.userEmail.value = null
        }
    }
})
}


@HiltViewModel
class ResolveAuthViewModel @Inject constructor(
    private val dataStoreManager: DataStoreManager): ViewModel(){

    val userEmail = MutableLiveData<String>()

    init {
        viewModelScope.launch{
           val job = async {dataStoreManager.email.first()}
           val email = job.await()
            if(email != ""){
                userEmail.value = email
            }
        }
    }

}

但我一直有一个例外说

java.lang.IllegalStateException: You cannot access the NavBackStackEntry's ViewModels until it is added to the NavController's back stack (i.e., the Lifecycle of the NavBackStackEntry reaches the CREATED state).

我正在使用下面的jetpack lib进行导航

 implementation("androidx.navigation:navigation-compose:2.4.0-rc01")

我的主屏幕和教程屏幕没有问题,因为我尝试分别运行它们并且效果很好。

4

0 回答 0