navController.popBackStack Jetpack Compose Not working

153 Views Asked by At

I have an admin feature where the user is redirected to the adminHomeScreen from a screen for editing contents, now this is a button on the header part of my UI.

Now on my previous code in my common user this code does work

`
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3Api::class)
@Composable
fun HeaderComponentUser(navController: NavController?) {
    TopAppBar(
        colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
            containerColor = Color(0xFFFFD317)
        ),
        navigationIcon = {
            IconButton(
                onClick = {
                    if (navController != null) {
   Log.d("BACK BUTTON", "HeaderComponentAdmin: ERROR NOT WORKING") // Log for test 
                        navController.popBackStack(Screen.Home.route, false)
// THE CODE IS THE SAME IN THE ADMIN SIDE 
  //        navController.popBackStack(Screen.AdminHomeScreen.route, true) // <- 
                    }
                }
            ) {
                Icon(
                    contentDescription = "BACK",
                    imageVector = Icons.Filled.KeyboardArrowLeft,
                    modifier = Modifier.size(32.dp),
                    tint = Color(0xFF000000)
                )
            }
        },
        title = {
            Text(
                text = "",
                style = MaterialTheme.typography.titleMedium,
                fontWeight = FontWeight.Bold,
                overflow = TextOverflow.Ellipsis,
                maxLines = 1
            )
        },

        )

}'

HeaderComponentUser(navController)

this is my code for the calling header UI

`
navController.popBackStack(Screen.AdminHomeScreen.route, true)


` <- this code doesn't work to 

Over all the code in the common user is the same as the admin user however it does not navigate back to AdminHomeScreen from the screen for editing contents

1

There are 1 best solutions below

2
askosarygin On

When you are acting as a common user, and need to go to Screen.Home.route, you use parameter inclusive = false in function:

navController.popBackStack(Screen.Home.route, false)

But, when you are acting as a admin, and need to go to Screen.AdminHomeScreen.route, you use parameter inclusive = true in function:

navController.popBackStack(Screen.AdminHomeScreen.route, true)

What is popBackStack() in our case? This is function, what we can use for movements to back inside NavController BackStack, it and it has two required parameters:

route - route of screen what you need to open

inclusive - boolean value, when inclusive = true, pops (removes) all destinations from top of BackStack to specified in the parameter route, including specified in the parameter route. When inclusive = false, pops (removes) all destinations from top of BackStack to specified in the parameter route, but not including specified in the parameter route.

For example:

Open Screen1 -> Then open Screen 2 -> Then open Screen 3 -> 
-> Then call navController.popBackStack(route = "Screen2", inclusive = true) ->
-> Screen2 will remove, Screen1 will open

Open Screen1 -> Then open Screen 2 -> Then open Screen 3 -> 
-> Then call navController.popBackStack(route = "Screen2", inclusive = false) ->
-> Screen2 will open

I guess, in your case, navigation does not navigate back to AdminHomeScreen from the screen for editing contents due to parameter inclusive = true