Navigation Event 库提供了一种 Kotlin Multiplatform (KMP) 解决方案,用于将系统级导航事件集成到您的应用中。它旨在成为在各种受支持的平台上处理导航指令的基础层。
主要概念
导航事件系统围绕集中式调度程序-处理程序模型构建,通常在父子层次结构中使用,以映射到复杂的界面结构(例如 Jetpack Compose 中的界面结构)。
NavigationEventDispatcher
NavigationEventDispatcher 是负责管理所有已注册的 Navigation 事件使用方 (NavigationEventHandler) 并协调事件流的中心类。
在分层设置中,同一链中的所有调度程序共享一个 NavigationEventProcessor,该调度程序可管理全局状态并确保整个树中只有一个统一的调度顺序。
NavigationEventHandler
NavigationEventHandler 是一个抽象类,用于接收和处理由 NavigationEventDispatcher 分派的导航事件。它定义了与导航手势生命周期的不同阶段(例如手势开始、进行、完成或取消时)对应的回调方法。
处理程序可以响应这些事件,以便根据用户导航操作更新界面或应用状态。可以向调度器注册多个处理程序,并根据优先级和注册顺序调用这些处理程序。
NavigationEvent
NavigationEvent 是一个数据类,用于携带导航手势的详细信息。
NavigationEventInfo
NavigationEventInfo 是一个抽象类,可提供有关导航状态的上下文信息。
NavigationEventInput
NavigationEventInput 是用于生成和调度导航事件的组件的抽象类。它充当导航系统的“输入”端,将平台特定的事件(例如系统返回手势或按钮点击)转换为可发送到 NavigationEventDispatcher 的标准化事件。
支持的导航方向和触发器
导航事件系统旨在涵盖除系统返回按钮之外的更多功能,其设计支持跨平台的多种导航方向和输入方法。
支持的指令
不同平台支持不同的导航方向:
平台 |
返回 |
向上 |
转发 |
首页 |
Android 手机 |
✅ |
✅ |
🚫 |
✅ |
Android 平板电脑 |
✅ |
✅ |
🚫 |
✅ |
Web(浏览器) |
✅ |
✅ |
✅ |
🚫 |
iOS(iPhone/iPad) |
✅ |
🚫 |
✅ |
✅ |
支持的触发器
在每个平台上,输入处理都是通过各种机制实现的:
触发器 |
Android 手机 |
Web(浏览器) |
iOS(iPhone/iPad) |
键盘返回按钮 |
✅ 返回 |
❓ |
✅ 返回 |
软件返回按钮 |
🚫 |
✅ 返回 |
✅ 返回 |
软件调高按钮 |
✅ 提高 |
🚫 |
🚫 |
从左侧滑动手势 |
✅ 返回 |
❓ |
✅ 返回 |
从右侧滑动的手势 |
✅ 返回 |
❓ |
✅ 转发 |
从底部滑动的手势 |
✅ 首页 |
🚫 |
✅ 首页 |