google/accompanist

[Navigation Material] Incorrect back behavior with nested navigator

WonderCsabo opened this issue · 2 comments

Description
When there is a nested navigation, the topmost bottom sheet does not gets the back event, the nested navigatitor pops instead.

Steps to reproduce

class MainActivity : ComponentActivity() {
    @OptIn(ExperimentalMaterialNavigationApi::class)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AppTheme {
                Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) {
                    val bottomSheetNavigator = rememberBottomSheetNavigator()
                    val topNavController = rememberNavController(bottomSheetNavigator)

                    ModalBottomSheetLayout(bottomSheetNavigator) {
                        NavHost(navController = topNavController, startDestination = "root") {
                            composable("root") { Root(topNavController) }
                            bottomSheet("dialog") { Dialog() }
                        }
                    }
                }
            }
        }
    }
}

@Composable
fun Root(topNavController: NavController) {
    Column {

        Button(onClick = { topNavController.navigate("dialog") }) {
            Text(text = "open dialog")
        }

        val nestedNavController = rememberNavController()

        NavHost(navController = nestedNavController, startDestination = "nested1", modifier = Modifier.weight(1f)) {
            composable("nested1") { Nested1(nestedNavController) }
            composable("nested2") { Nested2() }
        }
    }
}

@Composable
fun Nested1(nestedNavController: NavController) {
    Button(onClick = { nestedNavController.navigate("nested2") }) {
        Text(text = "Open nested2 screen")
    }
}

@Composable
fun Nested2() {
    Text(text = "nested2")
}

@Composable
fun Dialog() {
    Text("My Dialog")
}
  1. Open nested2 screen
  2. Open the bottom sheet in the top navigator
  3. Tap the back button

Expected behavior
The bottom sheet closes.

Additional context
Bottom sheet stays visible, under it we navigate back to nested1 screen.