You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 00:12:45