package dev.adriankuta.flights.navigation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.util.trace import androidx.navigation.NavController import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.rememberNavController import androidx.navigation.navOptions import dev.adriankuta.flights.ui.home.navigation.HomeRoute import dev.adriankuta.flights.ui.home.navigation.homeScreen import dev.adriankuta.flights.ui.home.navigation.navigateToHome import dev.adriankuta.flights.ui.home.navigation.navigateToStations import dev.adriankuta.flights.ui.home.navigation.stationsScreen @Composable fun FlightsNavGraph( modifier: Modifier = Modifier, navController: NavHostController = rememberNavController(), ) { NavHost( navController = navController, startDestination = HomeRoute, modifier = modifier, ) { homeScreen() stationsScreen() } } fun NavController.navigateToTopLevelDestination(topLevelDestination: TopLevelDestination) { trace("Navigation: ${topLevelDestination.name}") { val topLevelNavOptions = navOptions { // Pop up to the start destination of the graph to // avoid building up a large stack of destinations // on the back stack as users select items popUpTo(graph.findStartDestination().id) { saveState = true } // Avoid multiple copies of the same destination when // reselecting the same item launchSingleTop = true // Restore state when reselecting a previously selected item restoreState = true } when (topLevelDestination) { TopLevelDestination.HOME -> navigateToHome(topLevelNavOptions) TopLevelDestination.STATIONS -> navigateToStations(topLevelNavOptions) } } }