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

Jetpack Compose导航报错:未传入route参数问题求助

解决Jetpack Compose类型安全导航的"route参数未传入"错误

错误根源

你碰到的No value passed for parameter 'route'错误,主要有两个原因:

  1. 缺少navigation-compose-ktx依赖,编译器无法识别泛型版本的composable函数,默认匹配了需要传入字符串route的基础重载
  2. Profile定义为object,无法承载导航参数,不符合类型安全路由的传参要求

修复步骤

1. 添加必要依赖

在模块级build.gradle.kts(或build.gradle)中补充以下依赖(版本请与你的Navigation Compose版本保持一致):

dependencies {
    // Navigation Compose核心库
    implementation("androidx.navigation:navigation-compose:2.7.7")
    // 类型安全路由扩展库
    implementation("androidx.navigation:navigation-compose-ktx:2.7.7")
    // Kotlin序列化依赖
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
}

同时在项目级build.gradle.kts中启用Kotlin序列化插件:

plugins {
    // 保留原有插件(如com.android.application)
    kotlin("plugin.serialization") version "1.9.20"
}

2. 修正路由定义

把Profile从object改为data class来承载参数,无参数的Home可以保留object:

@Serializable
object Home

@Serializable
data class Profile(val id: String) // 可根据实际需求调整参数类型,比如Int

3. 调整导航代码

使用泛型版本的composable函数,修正后的MyApp代码如下:

@Composable
fun MyApp() {
    val navController: NavHostController = rememberNavController()

    NavHost(navController = navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile = backStackEntry.toRoute<Profile>()
            ProfileScreen(profile)
        }
    }
}

补充说明

类型安全路由的泛型composable是navigation-compose-ktx提供的扩展API,没有这个依赖时,编译器只会识别需要字符串route的基础版本,这就是报错的核心原因。另外,只有data class类型的可序列化对象才能携带导航参数,object仅适用于无参数路由场景。

内容的提问来源于stack exchange,提问作者Daniel Vanum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:28:27