从文档中,我看到您可以像这样嵌套导航图:
NavHost(navController, startDestination = "home") {
...
// Navigating to the graph via its route ('login') automatically
// navigates to the graph's start destination - 'username'
// therefore encapsulating the graph's internal routing logic
navigation(startDestination = "username", route = "login") {
composable("username") { ... }
composable("password") { ... }
composable("registration") { ... }
}
...
}
我想知道,如何在路由中传递一个参数,并使其对导航图中的所有可组合对象可用?
这是我目前的导航图:
navigation(
// I'd like to grab this parameter
route = "dashboard?classId={classId}",
startDestination = Route.ScreenOne.route) {
composable(Route.ScreenOne.route) {
// And then pass the parameter here, or to any composable below
ScreenOne(classId)
}
composable(Route.ScreenTwo.route) {
ScreenTwo()
}
composable(Route.ScreenThree.route) {
ScreenThree()
}
}
我基本上是在尝试避免在每个可组合路径上单独设置classId导航参数,我没有找到像composable()
那样将参数列表传递给navigation()
的方法。
也许我所描述的是不可能的,但期待任何人的想法!
2条答案
按热度按时间nmpmafwu1#
可以从子可合成对象访问图形参数:
zengzsys2#
从基于Hilt的项目中的一个快速测试来看,似乎将属性作为参数传递给
navigation
图形组件会导致该属性在savedStateHandle
中可用于在该图形位于内存中时创建的任何ViewModel
。例如:
我假设这是在导航图级别创建和维护参数时的工作方式。因此,如果图在内存中,则可以通过
savedStateHandle
访问该属性。如果您要将此图从导航堆栈弹出,我希望该值不再是可访问的。希望这会有所帮助!