Navigation in Jetpack compose
1 min readAug 11, 2026
PrimaryButton(
text = "LOGIN",
onClick = {
navController.navigate(Screen.User.createRoute(email, password, rememberMe)) {
popUpTo(Screen.Login.route) {
inclusive = true
}
}
}
)
popUpTo(Screen.Login.route)-> pops the back stack up to the Login screen.
inclusive = true -> also removes the Login screen itself.
This closes the current screen and returns to the previous one:
navController.popBackStack()
If you want to remove all previous screens:
navController.navigate(Screen.User.createRoute(email, password, rememberMe)) {
popUpTo(0) {
inclusive = true
}
launchSingleTop = true
}
Login → Home/User flow:
navController.navigate(
Screen.User.createRoute(email, password, rememberMe)
) {
popUpTo(Screen.Login.route) {
inclusive = true
}
launchSingleTop = true
}package com.tcs.testing.screenNavigationGet Pandiyan Mani’s stories in your inbox
Join Medium for free to get updates from this writer.
import android.net.Uri
sealed class Screen(val route: String) {
data object Login : Screen("login")
data object User : Screen("user/{email}/{password}/{rememberMe}") {
fun createRoute(
email: String,
password: String,
rememberMe: Boolean
): String {
return "user/${Uri.encode(email)}/${Uri.encode(password)}/$rememberMe"
}
}
data object AddScreen : Screen("addscreen")
}
package com.tcs.testing.screenNavigation
import androidx.compose.runtime.Composable
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.tcs.testing.screen.AddScreen
import com.tcs.testing.screen.LoginScreen
import com.tcs.testing.screen.UserScreen
@Composable
fun AppNavigation() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screen.Login.route
) {
composable(Screen.Login.route) {
LoginScreen(navController)
}
composable(
route = Screen.User.route
) { backStackEntry ->
val email = backStackEntry.arguments?.getString("email") ?: ""
val password = backStackEntry.arguments?.getString("password") ?: ""
val rememberMe =
backStackEntry.arguments?.getString("rememberMe")?.toBoolean() ?: false
UserScreen(
email = email,
password = password,
rememberMe = rememberMe
)
}
composable(Screen.AddScreen.route) {
AddScreen()
}
}
}






