Jetpack Compose登录页面无法跳转至首页问题排查
问题根源与修复方案
你的登录跳转失败的核心原因很明确:LoginScreenViewModel的signInWithEmailAndPassword方法在登录成功后,仅引用了传入的home回调变量,没有执行这个函数,导致ReaderLoginScreen中写的navController.navigate代码根本没被触发。
具体修复步骤
1. 修正ViewModel中的回调执行逻辑
打开LoginScreenViewModel.kt,找到signInWithEmailAndPassword方法,确保登录成功时调用回调函数,而不是仅仅引用它:
错误的写法(仅引用回调):
fun signInWithEmailAndPassword(email: String, password: String, home: () -> Unit) { // 登录逻辑(比如调用Auth服务) if (登录成功条件) { home // 这里只是引用变量,没执行跳转逻辑 } }
正确的写法(执行回调):
fun signInWithEmailAndPassword(email: String, password: String, home: () -> Unit) { // 示例:假设使用Firebase Auth做登录 auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener { task -> if (task.isSuccessful) { home() // 必须调用这个函数,触发跳转 } else { // 可选:处理登录失败的情况,比如抛出错误、提示用户 } } }
2. 验证导航路由配置
虽然你提到已经配置了路由,但建议再确认ReaderNavigation.kt中ReaderHomeScreen的注册是否正确,确保路由名称与ReaderScreens枚举中的值一致:
NavHost(navController = navController, startDestination = ReaderScreens.SplashScreen.name) { composable(ReaderScreens.SplashScreen.name) { /* 实现代码 */ } composable(ReaderScreens.LoginScreen.name) { ReaderLoginScreen(navController = navController) } composable(ReaderScreens.ReaderHomeScreen.name) { ReaderHomeScreen() // 确认组件正确引用 } }
3. 验证登录逻辑确实执行成功
在ViewModel的登录成功分支添加日志(比如Log.d("Login", "登录成功,触发跳转")),确认登录逻辑真的走到了执行回调的步骤,排除登录失败但未提示的情况。
内容的提问来源于stack exchange,提问作者Edgar
相关产品推荐
相关产品推荐

