Skip to content

导航概览

相关依赖

app/src/main/java/com/joker/kit/navigation 提供整套类型安全导航方案:AppNavigator 负责分发导航事件,AppNavHost 负责接管 NavController 并执行动画,NavigationResultKey/RouteInterceptor 等工具保证路由传参、登录拦截、结果回传的统一体验。所有 Feature 层的 ViewModel 只需继承 BaseViewModel 系列,就能无缝接入这套机制。

模块组成

文件/目录职责
AppNavigator.kt维护 MutableSharedFlow<NavigationEvent>,暴露 navigateTonavigateBackpopBackStackWithResultnavigateBackTo 等 API。
AppNavHost.kt创建 NavController、监听导航事件并执行动画,挂载各 Feature 的 mainGraph / authGraph / userGraph
NavigationEvent.kt定义事件模型(推新页、回退、带结果回退、回退到某页)。
NavigationResultKey.ktRefreshResultKey.kt类型安全的结果回传工具,默认提供刷新 Key。
RouteInterceptor.kt维护“需要登录的路由”列表,BaseViewModel 在跳转前统一检查。
routes/*使用 @Serializable 定义的路由对象,是所有跳转与 NavGraph 注册的基础。

事件流

  1. ViewModel 继承 BaseViewModel,调用 navigate(route) 等方法。
  2. BaseViewModel 将请求交给 AppNavigator,并在内部套上登录拦截。
  3. AppNavigator 把操作包装成 NavigationEvent 推送到 SharedFlow
  4. AppNavHost collectLatest 事件并调用 NavController.handleNavigationEvent() 执行跳转、动画、或结果回传。
  5. 需要监听刷新或复杂结果时,使用 NavigationResultKeySavedStateHandle 上读写强类型数据。

延伸阅读

为了方便检索,导航子主题拆分为以下文档:

阅读顺序可从概览开始,再按需求深入到具体章节。这样既能快速了解整体结构,又能在需要时针对性查阅。