您可以使用内置的类型安全 API 为代码提供编译时类型安全,
导航图。当您的应用使用 Navigation 组件时,这些 API 可用
Compose 或 Navigation Kotlin DSL。它们自 Navigation
2.8.0
起可用。
这些 API 等效于 Safe Args 为导航图提供的 API 使用 XML 构建而成
定义路由
如需在 Compose 中使用类型安全路由,您首先需要定义可序列化 类或对象。
- Object:为没有参数的路线使用对象。
- Class:为带有参数的路由使用类或数据类。
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
string,如composable("profile")
。 - path 类会定义每个导航参数的类型,如
val id: String
,因此无需NavArgument
。 - 对于配置文件路由,
toRoute()
扩展方法会重新创建 来自NavBackStackEntry
的Profile
对象及其 参数。
如需了解有关如何设计一般图表的更多信息,请参阅设计 导航图页面。
导航到“输入安全路线”
最后,您可以使用 navigate()
导航到可组合项。
函数:
navController.navigate(Profile(id = 123))
这会将用户导航到 composable<Profile>
导航图。任何导航参数(例如 id
)都可以通过以下方式获取:
使用 NavBackStackEntry.toRoute
重建 Profile
并读取其
属性。