You need to specify which screens you want to show and which screens you dont want; Otherwise it will show to all the screens inside Scaffold's body (which you have bottomBar). The code below was from my app.
Create a state which observes any destination changes on the navController
Inside when you can put any screens that you want to show navigationBar else just set currentScreen to NoBottomBar
@Composable private fun NavController.currentScreen(): State<MainSubScreen> { val currentScreen = remember { mutableStateOf<MainSubScreen>(MainSubScreen.Home) } DisposableEffect(key1 = this) { val listener = NavController.OnDestinationChangedListener { _, destination, _ -> when { destination.hierarchy.any { it.route == MainSubScreen.Home.route } -> { currentScreen.value = MainSubScreen.Home } else -> currentScreen.value = MainSubScreen.NoBottomBar } } addOnDestinationChangedListener(listener) } return currentScreen }
On the Scaffold where you put ur bottomBar
so you can check if currentScreen was NoBottomBar if it was, don't show it
// initialized currentScreeen above val currentScreen by navController.currentScreen() Scaffold( bottomBar = { if (currentScreen != MainSubScreen.NoBottomBar) { MainBottomNavigation() } else Unit } ) { // Your screen }