导航概览
介绍
导航模块负责统一管理路由声明、页面跳转、参数传递、结果回传与登录拦截。业务层只关注“要去哪里”和“要带什么参数”,不直接操作回退栈细节。
Android 版本已升级为 Navigation 3,核心实现位于: app/src/main/java/com/joker/kit/core/navigation/。
核心文件与职责
NavigationService.kt:全局导航服务与简写 API(navigate、navigateBack、navigateBackTo、navigateAndCloseCurrent、popBackStackWithResult)。AppNavigator.kt:底层导航执行器,负责命令分发、控制器绑定、登录拦截、结果事件流。AppNavHost.kt:应用导航宿主,创建回退栈、绑定AppNavigator、配置页面切换动画、挂载各模块 Graph。RouteInterceptor.kt:集中定义“需要登录才能访问”的路由集合。NavigationParam.kt:公共导航参数模型(如IdParam)。NavigationResult.kt、NavigationResultKey.kt、RefreshResultKey.kt:公共返回结果模型与类型安全结果 Key。
模块级导航封装
导航按业务域拆分:
- 路由定义:
core/navigation/<module>/*Routes.kt - 导航封装:
core/navigation/<module>/*Navigator.kt - Graph 注册:
feature/<module>/navigation/*Graph.kt
例如 Demo 模块:
core/navigation/demo/DemoRoutes.ktcore/navigation/demo/DemoNavigator.ktfeature/demo/navigation/DemoGraph.kt
这样做的目标是:
- 路由声明集中,避免字符串散落。
- 业务层直接调用模块 Navigator,避免在各个 ViewModel 重复写跳转中转方法。
AppNavHost只按模块组装 Graph,避免单文件膨胀和耦合。
推荐调用方式
业务代码统一使用简写函数和模块 Navigator:
kotlin
DemoNavigator.toNetworkDemo()
UserNavigator.toUserInfo()
navigateBack()
navigateBackTo(MainRoutes.Main)不需要在页面层传递 navigator 参数。
官方文档
- Navigation 3:https://developer.android.com/jetpack/androidx/releases/navigation3
- Lifecycle(
lifecycle-viewmodel-navigation3):https://developer.android.com/jetpack/androidx/releases/lifecycle
小结
导航关键点是三件事:
- 路由按模块集中定义(
*Routes)。 - 跳转通过模块 Navigator 或全局简写 API 发起。
- 页面注册通过模块 Graph 统一接入
AppNavHost。
后续章节会按路由配置、导航流程、登录拦截、结果回传逐一展开。