我创建了一个composable
名为 ResolveAuth。ResolveAuth 是用户在 Splash 之后打开应用程序时的第一个屏幕。它所做的只是检查数据存储区中是否存在电子邮件。如果是,则重定向到主屏幕,如果不是,则重定向到教程屏幕
这是我的composable
和viewmodel
代码
@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")
我的主屏幕和教程屏幕没有问题,因为我尝试分别运行它们并且效果很好。