Jetpack Compose嵌套导航中如何配置指向内部页面的Deep Link
你将嵌套导航包裹在composable节点内配置DeepLink的方案不推荐使用,该写法不符合Navigation Compose的设计规范,会导致导航栈分层异常、回退逻辑混乱、NavController状态同步出错等问题。
正确实现方案
方案1:给嵌套导航的根节点配置DeepLink
如果你需要DeepLink触发后直接跳转至该嵌套导航的默认起始页(也就是你示例中的username页面),直接给navigation节点配置DeepLink即可:
fun NavGraphBuilder.loginGraph(navController: NavController) { val deeplinkuri = "你的deeplink地址" navigation( startDestination = "username", route = "login", // 直接给嵌套导航根节点配置DeepLink deepLinks = listOf(navDeepLink { uriPattern = deeplinkuri }) ) { composable("username") { ... } composable("password") { ... } composable("registration") { ... } } }
触发DeepLink后,系统会自动构建正确的导航栈:先加载嵌套导航根节点,再自动跳转至其配置的startDestination,回退逻辑完全符合交互预期。
方案2:给嵌套导航内的指定子页面配置DeepLink
如果你需要根据不同的DeepLink跳转至嵌套导航内的不同子页面,直接给对应子composable节点配置DeepLink即可:
fun NavGraphBuilder.loginGraph(navController: NavController) { navigation(startDestination = "username", route = "login") { composable( route = "username", deepLinks = listOf(navDeepLink { uriPattern = "你的跳转到username的deeplink地址" }) ) { ... } composable( route = "password", deepLinks = listOf(navDeepLink { uriPattern = "你的跳转到password的deeplink地址" }) ) { ... } composable("registration") { ... } } }
该方式触发DeepLink后,系统会自动将嵌套导航根节点、目标子页面依次加入导航栈,回退时会先回到嵌套导航的上一级页面,不会出现栈逻辑异常。
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

