組み込みの型安全性 API を使用して、コンパイル時に型安全性を実現
作成します。これらの API は、アプリで Navigation API を使用している場合に
Compose または Navigation Kotlin DSL。Navigation
2.8.0
から利用できます。
これらの API は、Safe Args がナビゲーション グラフに提供するものと同等です。 XML で構築できます
ルートを定義する
Compose でタイプセーフなルートを使用するには、まずシリアル化可能なルートを定義する必要があります。 ルートを表すオブジェクトです。
- オブジェクト: 引数のないルートにオブジェクトを使用します。
- クラス: 引数を持つルートにクラスまたはデータクラスを使用します。
KClass<T>
: クラスなど、引数を渡す必要のない場合に使用します。 パラメータなし、またはすべてのパラメータにデフォルト値があるクラス <ph type="x-smartling-placeholder">- </ph>
- 例:
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()
拡張メソッドがNavBackStackEntry
のProfile
オブジェクトとそのオブジェクト 渡します。
一般的なグラフの設計方法について詳しくは、Google Cloud で ナビゲーション グラフ] ページを開きます。
タイプセーフ ルートに移動する
最後に、navigate()
を使用してコンポーザブルに移動します。
ルートのインスタンスを渡して関数を渡します。
navController.navigate(Profile(id = 123))
これにより、ユーザーはcomposable<Profile>
作成します。id
などのナビゲーション引数は、次のコマンドで取得できます。
NavBackStackEntry.toRoute
を使用して Profile
を再構築し、それを読み取る
プロパティです。