Navigation Event は、システムレベルのナビゲーション イベントをアプリケーションに統合するための Kotlin Multiplatform(KMP)ソリューションを提供するライブラリです。さまざまなサポート対象プラットフォームでナビゲーション指示を処理するための基盤レイヤとして設計されています。
主な概念
Navigation Event システムは、一元化されたディスパッチャー ハンドラ モデルを中心に構築されています。このモデルは、親子階層でよく使用され、Jetpack Compose に見られるような複雑な UI 構造にマッピングされます。
NavigationEventDispatcher
NavigationEventDispatcher は、登録されたすべてのナビゲーション イベント コンシューマー(NavigationEventHandler)を管理し、イベントのフローを調整する中心的なクラスです。
階層型設定では、同じチェーン内のすべてのディスパッチャーが単一の NavigationEventProcessor を共有します。この NavigationEventProcessor はグローバル状態を管理し、ツリー全体で単一の統一されたディスパッチ順序を保証します。
NavigationEventHandler
NavigationEventHandler は、NavigationEventDispatcher によってディスパッチされたナビゲーション イベントを受信して処理する抽象クラスです。ジェスチャーの開始、進行、完了、キャンセルなど、ナビゲーション ジェスチャーのライフサイクルのさまざまなステージに対応するコールバック メソッドを定義します。
ハンドラは、これらのイベントに応答して、ユーザーのナビゲーション アクションに応じて UI またはアプリの状態を更新できます。複数のハンドラをディスパッチャーに登録できます。ハンドラは、優先度と登録順序に基づいて呼び出されます。
NavigationEvent
NavigationEvent は、ナビゲーション ジェスチャーの詳細を保持するデータクラスです。
NavigationEventInfo
NavigationEventInfo は、ナビゲーションの状態に関するコンテキスト情報を提供する抽象クラスです。
NavigationEventInput
NavigationEventInput は、ナビゲーション イベントを生成してディスパッチするコンポーネントの抽象クラスです。ナビゲーション システムの「入力」側として機能し、プラットフォーム固有のイベント(システムの戻るジェスチャーやボタンクリックなど)を NavigationEventDispatcher に送信できる標準化されたイベントに変換します。
サポートされているナビゲーション方向とトリガー
ナビゲーション イベント システムは、システム バックボタンだけでなく、複数のナビゲーション方向とプラットフォーム間の入力方法をサポートする設計を包含するように設計されています。
サポートされている方向
プラットフォームによって、サポートされるナビゲーションの方向が異なります。
プラットフォーム |
戻る |
上 |
転送 |
ホーム |
Android スマートフォン |
✅ |
✅ |
🚫 |
✅ |
Android タブレット |
✅ |
✅ |
🚫 |
✅ |
ウェブ(ブラウザ) |
✅ |
✅ |
✅ |
🚫 |
iOS(iPhone/iPad) |
✅ |
🚫 |
✅ |
✅ |
サポートされているトリガー
入力処理は、各プラットフォームのさまざまなメカニズムによって実現されます。
トリガー |
Android スマートフォン |
ウェブ(ブラウザ) |
iOS(iPhone/iPad) |
キーボードの [戻る] ボタン |
✅ 戻る |
❓ |
✅ 戻る |
ソフトウェアの戻るボタン |
🚫 |
✅ 戻る |
✅ 戻る |
ソフトウェア アップボタン |
✅ アップ |
🚫 |
🚫 |
左からのジェスチャー |
✅ 戻る |
❓ |
✅ 戻る |
右からのジェスチャー |
✅ 戻る |
❓ |
✅ 転送 |
下からのジェスチャー |
✅ ホーム |
🚫 |
✅ ホーム |