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

Jetpack Compose混合默认与普通参数导航报错,求代码排查

Jetpack Compose导航中默认参数与普通参数结合的问题排查与修复

核心错误:路由路径不匹配

你的代码存在路由基础路径不一致的致命问题:

  • Screens.AssignScreen的路由定义为"assign_screen/{${Constants.TRIP_ID}}?dockId={${Constants.DOCK_ID}}"
  • 但passTripAndDockId方法返回的路径是"assign_dock_screen/$tripId?dockId=$dockId"

两者基础路径分别是assign_screen和assign_dock_screen,导航时系统找不到对应目的地,直接抛出IllegalArgumentException。

其他需修正的细节

  1. 可选参数配置冲突:你给dockId同时设置了defaultValue = ""和nullable = true,逻辑矛盾——已有默认空字符串,无需允许参数为null,建议移除nullable = true。
  2. 参数获取优化:获取必填参数tripId时,不需要用?.getString()?.toString(),可以用requireNotNull确保非空,避免潜在空指针问题。

修正后的完整代码

Screens对象代码

object AssignScreen :
    Screens("assign_screen/{${Constants.TRIP_ID}}?dockId={${Constants.DOCK_ID}}") {
    fun passTripAndDockId(tripId: String, dockId: String = ""): String {
        // 修正路径名称,与路由定义保持一致
        return "assign_screen/$tripId?dockId=$dockId"
    }
}
composable(
    Screens.AssignScreen.route,
    arguments = listOf(
        navArgument(Constants.TRIP_ID) {
            type = NavType.StringType
        },
        navArgument(Constants.DOCK_ID) {
            defaultValue = ""
            type = NavType.StringType
            // 移除不必要的nullable配置
        }
    )
) { backStackEntry ->
    // 优化参数获取逻辑
    val tripId = requireNotNull(backStackEntry.arguments?.getString(Constants.TRIP_ID))
    val dockId = backStackEntry.arguments?.getString(Constants.DOCK_ID) ?: ""
    // 页面业务逻辑
}

导航调用代码

navController.navigate(Screens.AssignScreen.passTripAndDockId(tripId = trip.id))

内容的提问来源于stack exchange,提问作者Ashish Gautam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:05:30