Provides a place in the Compose hierarchy for self-contained navigation to occur, with backwards navigation provided by a swipe gesture.
NavHostWithNamedArgument
@Composable
fun NavHostWithNamedArgument() {
// Example of using a NavHost where we pass an argument to a destination in the NavGraph.
val navController = rememberSwipeDismissableNavController()
SwipeDismissableNavHost(navController = navController, startDestination = "list") {
composable("list") {
ScalingLazyColumn(
modifier = Modifier.fillMaxSize().background(Color.DarkGray),
contentPadding = PaddingValues(horizontal = 8.dp, vertical = 32.dp),
verticalArrangement = Arrangement.Center,
) {
item { ListHeader { Text("List Screen") } }
items(5) { index ->
CompactChip(
modifier = Modifier.padding(vertical = 4.dp),
onClick = { navController.navigate("detail/$index") },
label = {
Text(
text = "Item $index",
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxSize(),
)
},
)
}
}
}
composable(
route = "detail/{Id}",
arguments = listOf(navArgument("Id") { type = NavType.IntType }),
) { backStackEntry ->
val itemId = backStackEntry.arguments?.getInt("Id") ?: 0
Column(
modifier = Modifier.fillMaxSize().background(Color.DarkGray),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
ListHeader { Text("Details Screen") }
Text("Item $itemId")
}
}
}
}
SimpleNavHost
@Composable
fun SimpleNavHost() {
// Example of using a NavHost where each destination in the NavGraph has a unique name.
val navController = rememberSwipeDismissableNavController()
SwipeDismissableNavHost(navController = navController, startDestination = "off") {
composable("off") {
Column(
modifier = Modifier.fillMaxSize().background(Color.DarkGray),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
Button(onClick = { navController.navigate("on") }) { Text("On") }
}
}
composable("on") {
Column(
modifier = Modifier.fillMaxSize().background(Color.DarkGray),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
Button(onClick = { navController.navigate("off") }) { Text("Off") }
}
}
}
}