Jetpack Compose嵌套导航中如何获取当前目标所属主路由?
获取Jetpack Compose嵌套导航图的根路由
NavController确实没有直接提供这类API,但可以通过遍历目的地的父级链来实现需求。直接写个扩展函数就能搞定:
fun NavController.getNestedGraphRootRoute(): String? { var currentNode = currentDestination ?: return null var parentNode = currentNode.parent // 向上遍历父级,直到到达嵌套图的根节点(父级的父级为空,说明当前节点是嵌套图的顶层) while (parentNode != null && parentNode.parent != null) { currentNode = parentNode parentNode = currentNode.parent } return currentNode.route }
用法示例
比如当前navController.currentDestination?.route返回"site1home",调用navController.getNestedGraphRootRoute()就能拿到它所属的嵌套图根路由"home"。
逻辑说明
- 从当前目的地出发,不断向上追溯
parent节点 - 当父级的父级为空时,当前节点就是嵌套图的根(因为根导航图的
parent为null,嵌套图的根节点的父级是根导航图) - 如果当前目的地本身就是根导航图的直接子节点,函数会返回它自己的路由(如果有定义)
内容的提问来源于stack exchange,提问作者Vaio
相关产品推荐
相关产品推荐

