Navigation (Traditional)
Dependencies
Section titled “Dependencies”implementation("androidx.navigation:navigation-compose:2.5.2")Base code with NavHost
Section titled “Base code with NavHost”val navController = rememberNavController()
NavHost(navController = navController, startDestination = "home"){ composable("home"){ Home() } composable("about"){ About() } composable("new"){ New() }}The page set in startDestination will be displayed when the NavHost Component is rendered.
Navigate Between Screens
Section titled “Navigate Between Screens”navigate()- navigate to a screenpopBackStack()- navigate to the last screen
Button( onClick = { navController.navigate("about") }) { Text("Go to About")}
Button( onClick = { navController.popBackStack() }) { Text("Go Back")}Nav Arguments
Section titled “Nav Arguments”Setup NavHost with arguments
Section titled “Setup NavHost with arguments”@Composablefun AppNavigation() { val navController = rememberNavController() NavHost(navController = navController, startDestination = "home") { composable("home") { HomeScreen(navController) } composable( route = "detail/{itemId}", arguments = listOf(navArgument("itemId") { type = NavType.StringType }) ) { backStackEntry -> DetailScreen(itemId = backStackEntry.arguments?.getString("itemId")) } }}Navigate with argument
Section titled “Navigate with argument”@Composablefun HomeScreen(navController: NavController) { Button(onClick = { navController.navigate("detail/123") }) { Text("Go to Detail") }}Receive argument
Section titled “Receive argument”@Composablefun DetailScreen(itemId: String?) { Text("Item ID: $itemId")}Restrict User from Going Back
Section titled “Restrict User from Going Back”navController.navigate("signin") { // Clear the back stack to prevent the user from navigating back to the home screen popUpTo("home") { inclusive = true }}Type-Safe Navigation
Section titled “Type-Safe Navigation”With Enum
Section titled “With Enum”enum class Screen { Home, List}var navController = rememberNavController()NavHost(navController = navController, startDestination = Screen.Home.name) { composable(Screen.Home.name) { HomeScreen() } composable(Screen.List.name) { ListScreen() }}With Sealed Class
Section titled “With Sealed Class”sealed class Screen(val route: String) { object Home : Screen("home") object List : Screen("list")}var navController = rememberNavController()NavHost(navController = navController, startDestination = Screen.Home.route) { composable(Screen.Home.route) { HomeScreen() } composable(Screen.List.route) { ListScreen() }}Open URI
Section titled “Open URI”Create a URI handler
val uriHandler = LocalUriHandler.currenturiHandler.openUri("https://eliaschen.dev")