'Jetpack Compose + Navigation: navigating to to BottomBar destination from different BottomBar screen

Problem:

BottomBar has 4 destination :ScreenA, ScreenB, ScreenC and ScreenD.

While on ScreenA pressing a button(not bottom bar item) I want to go to ScreenB with parameter.

Code:

NavGraph

AnimatedNavHost(navController = navController, startDestination = "screen_a") {
    composable("screen_a") {
        ScreenA(navToScreenB = {
            navController.navigate("screen_b?param=1") {
        })
    }
    navigation(
        route = "screen_b",
        startDestination = "screen_b?param={param}",
    ) {
        composable(
            route = "screen_b?param={param}",
            arguments = listOf(navArgument("param") { type = NavType.IntType })
        ) { backStackEntry ->
            val param =  backStackEntry.arguments?.getBoolean("param") ?: 0
            ScreenB(param = param)
        }
        composable(route = "screen_b/details") {
            ScreenB_details(...)
        }
    }
}

BottomBar

fun BottomNavigation(navController: NavController, selectedNavigation: Screen) {
    val items = listOf(...)
    BottomNavigation(
        backgroundColor = MaterialTheme.colors.primary
    ) {
        items.forEach { item -> BottomNavigationItem(
                onClick = {
                    navController.navigate(item.screen.route) {
                        navController.graph.startDestinationRoute?.let { route ->
                            popUpTo(route) { saveState = true }
                        }
                        launchSingleTop = true
                        restoreState = true
                    }
                }
            )
        }
    }
}

So far clicking the button on ScreenA navigates me to ScreenB but the param value is always 0 as I would never pass the arg which is passed in navToScreenB lambda. I'm using compose_version = '1.2.0-alpha04' and "androidx.navigation:navigation-compose:2.5.0-alpha03"



Solution 1:[1]

Turns out that {param} in route and navArgument({param}) have to be exact the same even if the path looks correct and has the args in route

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kamil