Skip to content

导航概览

介绍

导航模块负责统一管理路由声明、页面跳转、参数传递、结果回传与登录拦截。业务层只关注“要去哪里”和“要带什么参数”,不直接操作回退栈细节。

Android 版本已升级为 Navigation 3,核心实现位于: app/src/main/java/com/joker/kit/core/navigation/

核心文件与职责

  • NavigationService.kt:全局导航服务与简写 API(navigatenavigateBacknavigateBackTonavigateAndCloseCurrentpopBackStackWithResult)。
  • AppNavigator.kt:底层导航执行器,负责命令分发、控制器绑定、登录拦截、结果事件流。
  • AppNavHost.kt:应用导航宿主,创建回退栈、绑定 AppNavigator、配置页面切换动画、挂载各模块 Graph。
  • RouteInterceptor.kt:集中定义“需要登录才能访问”的路由集合。
  • NavigationParam.kt:公共导航参数模型(如 IdParam)。
  • NavigationResult.ktNavigationResultKey.ktRefreshResultKey.kt:公共返回结果模型与类型安全结果 Key。

模块级导航封装

导航按业务域拆分:

  • 路由定义:core/navigation/<module>/*Routes.kt
  • 导航封装:core/navigation/<module>/*Navigator.kt
  • Graph 注册:feature/<module>/navigation/*Graph.kt

例如 Demo 模块:

  • core/navigation/demo/DemoRoutes.kt
  • core/navigation/demo/DemoNavigator.kt
  • feature/demo/navigation/DemoGraph.kt

这样做的目标是:

  1. 路由声明集中,避免字符串散落。
  2. 业务层直接调用模块 Navigator,避免在各个 ViewModel 重复写跳转中转方法。
  3. AppNavHost 只按模块组装 Graph,避免单文件膨胀和耦合。

推荐调用方式

业务代码统一使用简写函数和模块 Navigator:

kotlin
DemoNavigator.toNetworkDemo()
UserNavigator.toUserInfo()

navigateBack()
navigateBackTo(MainRoutes.Main)

不需要在页面层传递 navigator 参数。

官方文档

小结

导航关键点是三件事:

  1. 路由按模块集中定义(*Routes)。
  2. 跳转通过模块 Navigator 或全局简写 API 发起。
  3. 页面注册通过模块 Graph 统一接入 AppNavHost

后续章节会按路由配置、导航流程、登录拦截、结果回传逐一展开。