您可以使用內建的類型安全 API,為您的應用程式提供編譯時間類型安全。
導覽圖這些 API 只有在應用程式使用 Navigation
Compose 或 Navigation Kotlin DSL。自 Navigation
2.8.0
起開放使用。
這些 API 相當於 Safe Args 提供給導覽圖 以 XML 建構而成
定義路徑
如要在 Compose 中使用類型安全路徑,您需先定義可序列化的路徑 代表路線的類別或物件。
- 物件:針對不含引數的路徑使用物件。
- 類別:針對含有引數的路線,使用類別或資料類別。
KClass<T>
:如果您不需要傳遞引數 (例如類別),請使用此選項 不含參數的類別,或所有參數皆具有預設值的類別- 例如:
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>
。- 相較於傳遞
route
字串,如composable("profile")
中。 - route 類別定義每個導覽引數的類型,如
val id: String
,因此不需要NavArgument
。 - 針對設定檔路徑,
toRoute()
擴充功能方法會重新建立NavBackStackEntry
及其所含的Profile
物件 引數。
如需更多有關如何一般設計圖表的資訊,請參閱「設計 「導覽圖」頁面中。
導航到類型安全路徑
最後,您可以使用 navigate()
導覽至可組合函式
函式,方法是傳入路徑的例項:
navController.navigate(Profile(id = 123))
這會將使用者導向至 composable<Profile>
目的地
導覽圖任何導覽引數,例如 id
,都可以透過
使用 NavBackStackEntry.toRoute
重新建構 Profile
,並讀取其
資源。