Как обратиться к вложенному графу из двух других графов в Compose Navigation Android
Есть нижняя навигация. Нужно попасть во вложенный граф (roomGraph) из двух разных графов (homeGraph и reservationGraph).
При переходе по нижней навигации, мы открываем новый граф, например reservationGraph, всплывая к графу нижней навигации bottomNavGraph.
popUpTo(navController.graph.startDestinationId)
Если разместить граф комнат в двух местах, вылетает ошибка что маршрут не найден. Если разместить граф комнат на уровне bottomNavGraph, тогда будет нарушена иерархия и подсветка активного пункта в нижней навигации пропадет (но стек сохранится, так как poUpTo не будет вызван).
private fun isSelected(currentDestination: NavDestination?, screen: Screen): Boolean {
return currentDestination?.hierarchy?.any { it.route == screen.route } == true
}
Но нужно чтобы мы добавляли в иерархию вложенный граф и подсветка активного таба в навигации сохранялась.
//in activity
NavHost(
navController = navController,
startDestination = Screen.BottomNavGraph.route,
route = Screen.App.route
) {
bottomNavGraph(navController = navController)
}
fun NavGraphBuilder.bottomNavGraph(navController: NavHostController) {
navigation(
route = Screen.BottomNavGraph.route,
startDestination = Screen.HomeGraph.route
) {
homeGraph(navController = navController)
reservationGraph(navController = navController)
...
}
}
fun NavGraphBuilder.homeGraph(navController: NavHostController) {
...
roomGraph(navController = navController)
}
fun NavGraphBuilder.reservationGraph(navController: NavHostController) {
...
roomGraph(navController = navController)
}
//onClick in BottomNavigation
if (currentDestination?.route != screen.route) {
navController.navigate(screen.route) {
this.launchSingleTop = true
this.restoreState = true
popUpTo(navController.graph.startDestinationId) {saveState = true}
}
}
При переходе из homeGraph, граф roomGraph виден, но при переходе из reservationGraph возникает ошибка.
java.lang.IllegalArgumentException: No destination with ID -1553965374 is on the NavController's back stack. The current destination is Destination(0x29ea2164) route=roomShared...
переход по нижней навигации
D/TAG_DEBUG_NAV: navController.graph.startDestinationRoute: bottomNavGraph
D/TAG_DEBUG_NAV: navController.graph.findStartDestination().route: home
D/TAG_DEBUG_NAV: navController.backQueue.first(): app
D/TAG_DEBUG_NAV: navController.currentDestination?.route: reservation
D/TAG_DEBUG_NAV: 0: entry.destination.route: app
D/TAG_DEBUG_NAV: 1: entry.destination.route: bottomNavGraph
D/TAG_DEBUG_NAV: 2: entry.destination.route: reservationGraph
D/TAG_DEBUG_NAV: 3: entry.destination.route: reservation
Как вложить граф в другие и при этом сохранить иерархию?