类型安全导航问题:带参数起始目标引发序列化异常
问题原因
你传入的startDestination参数是MainScreenFirstScreen这个data class的Companion对象(Kotlin中直接引用类名会指向其Companion),而该Companion未标记@Serializable,导致Navigation组件尝试序列化它时抛出异常。
修复步骤
1. 修正导航图的startDestination参数
将导航图构建代码中的startDestination改为传入KClass(添加::class后缀):
fun NavGraphBuilder.mainScreenOwnerNavGraph( navHostController: NavHostController, ) { navigation<OwnerGraph.MainScreen>( // 修正:添加::class,传入KClass而非Companion对象 startDestination = OwnerGraph.MainScreen.MainScreenFirstScreen::class ) { composable<OwnerGraph.MainScreen.MainScreenFirstScreen> { navBackStackEntry -> Text("Main Screen") } } }
2. 确认序列化配置正确
确保项目已正确配置kotlinx.serialization插件和依赖:
- 在Module级别的
build.gradle中添加序列化插件:plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlinx-serialization' // 必须添加 } - 添加序列化依赖:
dependencies { implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1" implementation "androidx.navigation:navigation-compose:2.7.5" // 确保导航依赖版本正确 }
3. 验证导航调用代码
你的导航调用代码无需修改,直接传入MainScreenFirstScreen实例即可:
onNavigateToNextScreen = { id -> navHostController.navigate( route = OwnerGraph.MainScreen.MainScreenFirstScreen(id = id) ) }
内容的提问来源于stack exchange,提问作者No_Name
相关产品推荐
相关产品推荐

