Как очищать стак в NavController чтоб там оставался только один экран?
У меня есть экран с composable для планшета, где с левой стороны находится панель со списком кнопок. Когда пользователь нажимает на любую из этих кнопок, в правой панели открывается соответствующий экран.
Для поддержки этой функциональности я использую NavHost
в правой панели.
...
Column(
modifier = Modifier
.background(Color.Cyan.copy(alpha = 0.2f)) // TODO: JUST FOR TESTING
.fillMaxHeight()
.weight(2f)
) {
NavHost(
navController = navController,
startDestination = LanguageSettingsScreenRoute.ROUTE
) {
composable(LanguageSettingsScreenRoute.ROUTE) {
LanguageSettingsScreen()
}
composable(DeviceSettingScreenRoute.ROUTE) {
DeviceSettingScreen()
}
}
}
...
Здесь у меня LanguageSettingsScreenRoute
как startDestination
.
Затем (например:) пользователь нажимает на DeviceSettingScreen
.
...
SettingItem.SettingType.LANGUAGE_SETTINGS ->
navigator.navigate(route = LanguageSettingsScreenRoute) {
popUpTo(LanguageSettingsScreenRoute.buildRoute()) { inclusive = true }
}
SettingItem.SettingType.DEVICE_SETTINGS ->
navigator.navigate(route = DeviceSettingScreenRoute) {
popUpTo(DeviceSettingScreenRoute.buildRoute()) { inclusive = true }
}
...
Я ожидаю, что DeviceSettingScreen
будет единственным экраном в стеке, но на самом деле он накладывается на LanguageSettingsScreen
. Таким образом, когда я нажимаю "back button", сначала поднимается второй экран из стака - DeviceSettingScreen
, и затем нужно снова нажать "back button", чтобы вернуться к первому экрану LanguageSettingsScreen
и выйти.
Вопрос: как сохранить только один "выбранный" экран в стаке и удалить все остальные, чтобы пользователь мог нажать "back button" один раз и выйти?