Kotlin DSL と Navigation Compose における型安全性

組み込みの型安全性 API を使用して、コンパイル時に型安全性を実現 作成します。これらの API は、アプリで Navigation API を使用している場合に Compose または Navigation Kotlin DSLNavigation 2.8.0 から利用できます。

これらの API は、Safe Args がナビゲーション グラフに提供するものと同等です。 XML で構築できます

ルートを定義する

Compose でタイプセーフなルートを使用するには、まずシリアル化可能なルートを定義する必要があります。 ルートを表すオブジェクトです。

  • オブジェクト: 引数のないルートにオブジェクトを使用します。
  • クラス: 引数を持つルートにクラスまたはデータクラスを使用します。
  • KClass<T>: クラスなど、引数を渡す必要のない場合に使用します。 パラメータなし、またはすべてのパラメータにデフォルト値があるクラス <ph type="x-smartling-placeholder">
      </ph>
    1. 例: Profile::class

いずれの場合も、オブジェクトまたはクラスはシリアル化可能である必要があります。

例:

// Define a home route that doesn't take any arguments
@Serializable
object Home

// Define a profile route that takes an ID
@Serializable
data class Profile(val id: String)

グラフを作成する

次に、ナビゲーション グラフを定義する必要があります。composable() を使用する 関数を使用して、コンポーザブルをナビゲーション グラフ内のデスティネーションとして定義します。

NavHost(navController, startDestination = Home) {
     composable<Home> {
         HomeScreen(onNavigateToProfile = { id ->
             navController.navigate(Profile(id))
         })
     }
     composable<Profile> { backStackEntry ->
         val profile: Profile = backStackEntry.toRoute()
         ProfileScreen(profile.id)
     }
}

この例では、次のことを確認します。

  • composable() は型パラメータを受け取ります。つまり composable<Profile>
  • デスティネーション タイプを定義する方が、 composable("profile") のような route 文字列
  • ルートクラスは、次に示すように、各ナビゲーション引数の型を定義します。 val id: String であるため、NavArgument は不要です。
  • プロファイル ルートの場合、toRoute() 拡張メソッドが NavBackStackEntryProfile オブジェクトとそのオブジェクト 渡します。

一般的なグラフの設計方法について詳しくは、Google Cloud で ナビゲーション グラフ] ページを開きます。

最後に、navigate() を使用してコンポーザブルに移動します。 ルートのインスタンスを渡して関数を渡します。

navController.navigate(Profile(id = 123))

これにより、ユーザーはcomposable<Profile> 作成します。id などのナビゲーション引数は、次のコマンドで取得できます。 NavBackStackEntry.toRoute を使用して Profile を再構築し、それを読み取る プロパティです。

参考情報