Код: Выделить всё
@Composable
fun TopLevelNavHost(
navigateToRoot: (Route) -> Unit,
modifier: Modifier = Modifier
) {
val topLevelNavController = rememberNavController()
val currentBackStackEntry by topLevelNavController.currentBackStackEntryAsState()
val currentBackStack by topLevelNavController.currentBackStack.collectAsStateWithLifecycle()
val density = LocalDensity.current
val navigateTo: (Route) -> Unit = { route ->
if (route !is Route.TopLevel) {
navigateToRoot(route)
} else {
topLevelNavController.navigate(route.path)
}
}
Scaffold(
bottomBar = {
BottomBar(
currentRoutePath = currentBackStackEntry?.destination?.route ?: "top_level",
navigateToCallback = { route ->
topLevelNavController.navigate(route.path) {
if (currentBackStack.any { navBackStackEntry -> navBackStackEntry.destination.route == route.path }){
launchSingleTop = true
} else {
restoreState = true
}
}
}
)
},
modifier = modifier,
) { innerPadding ->
NavHost(
navController = topLevelNavController,
startDestination = Route.TopLevel.Home.path,
modifier = modifier.padding(
bottom = innerPadding.calculateBottomPadding() - with(density) {
ScaffoldDefaults.contentWindowInsets.getBottom(density).toDp()
},
),
) {
// composables
}
}
}
Я нашел предложение использовать popUpTo, но это удаляет промежуточные маршруты, чего я не хочу. По сути, пытаюсь реализовать навигацию YouTube.
Подробнее здесь: https://stackoverflow.com/questions/798 ... navigation
Мобильная версия