Wear OS 向け Compose での Navigation

Android Jetpack の Navigation コンポーネントは、Jetpack Compose アプリをサポートしています。Navigation コンポーネントのインフラストラクチャと機能を活用しながら、コンポーザブル間を移動できます。

このページでは、Wear OS 向け Compose の Jetpack Navigation との違いについて説明します。

セットアップ

アプリ モジュールの build.gradle ファイルで次の依存関係を使用します。

Kotlin

dependencies {
    def wear_compose_version = "1.4.0"
    implementation "androidx.wear.compose:compose-navigation:$wear_compose_version"
}

これは、Wear OS 固有の代替実装を実現するため、androidx.navigation:navigation-compose アーティファクトの代わりに使用されます。

ナビゲーション コントローラ、ホスト、グラフを作成する

Wear OS 向け Compose を使用して移動するには、Wear OS 以外のアプリに必要な 3 つのコンポーネント(ナビゲーション コントローラ、ホスト、グラフ)が必要です。

rememberSwipeDismissableNavController() を使用して WearNavigator のインスタンスを作成します。これは、Wear OS アプリに適した NavController の実装です。

Kotlin

val navController = rememberSwipeDismissableNavController()

NavController は、Compose アプリでナビゲーションに使用される主要な API です。Wear OS では SwipeDismissableNavHost であるナビゲーション ホスト内のコンポーザブル間の移動を制御します。

Kotlin

val navController = rememberSwipeDismissableNavController()
SwipeDismissableNavHost(
    navController = navController,
    startDestination = "message_list"
) {
    // TODO: build navigation graph
}

NavHost コンポーザブルと同様に、ナビゲーション コントローラ、開始デスティネーションのルート、ここでは後置ラムダとして表示されるナビゲーション グラフのビルダーへの参照を受け取ります。

開始デスティネーションは、ナビゲーション コントローラを使用して移動する必要がある他のすべてのデスティネーションとともに、ナビゲーション グラフのビルダーで指定する必要があります。

val navController = rememberSwipeDismissableNavController()
SwipeDismissableNavHost(
    navController = navController,
    startDestination = "message_list"
) {
    composable("message_list") {
        MessageList(onMessageClick = { id ->
            navController.navigate("message_detail/$id")
        })
    }
    composable("message_detail/{id}") {
        MessageDetail(id = it.arguments?.getString("id")!!)
    }
}

Jetpack Navigation の詳細については、Compose を使用したナビゲーションを参照するか、Jetpack Compose のナビゲーションの Codelab を受講してください。