как удалить составной объект из заднего стека в Compose-Navigation
В моем приложении есть экран, который позволяет пользователю редактировать элемент в базе данных, и после того, как пользователь заканчивает редактирование элемента, он нажимает кнопку «Готово», которая переводит его на предыдущий экран. Но когда пользователь нажимает кнопку «Назад», он снова переходит на экран редактирования.
Я хочу, чтобы пользователь нажимал кнопку «Назад», чтобы перейти на другой экран, как будто он никогда не переходил на экран редактирования.
вот мой график навигации:
@Composable
fun AppNavigator(
textFieldsViewModel: TextFieldsViewModel,
shoppingListsViewModel: ShoppingListsViewModel,
addNewShoppingListViewModel: AddNewShoppingListViewModel
) {
val navController = rememberNavController()
NavHost(navController, startDestination = "SplashScreen") {
composable("SplashScreen") {
SplashScreen(navController = navController)
}
composable("shoppingLists") {
ShoppingListsScreen(
navController = navController,
shoppingListsViewModel = shoppingListsViewModel,
textFieldsViewModel = textFieldsViewModel
)
}
composable(
"ItemsList/{listID}",
arguments = listOf(navArgument("listID") { type = NavType.IntType })
) {
ShoppingListItemsScreen(
it.arguments?.getInt("listID")!!,
shoppingListsViewModel = shoppingListsViewModel,
textFieldsViewModel = textFieldsViewModel,
navController = navController
)
}
composable(
"EditItem/{itemId},{itemName},{itemQuantity},{itemParentListId}",
arguments = listOf(
navArgument("itemId") { type = NavType.IntType },
navArgument("itemName") { type = NavType.StringType },
navArgument("itemQuantity") { type = NavType.IntType },
navArgument("itemParentListId") { type = NavType.IntType })
) {
EditItemScreen(
navController = navController,
textFieldsViewModel = textFieldsViewModel,
shoppingListsViewModel = shoppingListsViewModel,
itemId = it.arguments?.getInt("itemId")!!,
itemName = it.arguments?.getString("itemName")!!,
itemQuantity = it.arguments?.getInt("itemQuantity")!!,
itemParentListId = it.arguments?.getInt("itemParentListId")!!
)
}
composable("AddNewShoppingList") {
AddNewShoppingListScreen(
navController = navController,
textFieldsViewModel = textFieldsViewModel,
addNewShoppingListViewModel = addNewShoppingListViewModel,
shoppingListsViewModel = shoppingListsViewModel
)
}
}
}
А вот код кнопки, отвечающей за переход к предыдущему составному элементу:
IconButton(
onClick = {
shoppingListsViewModel.addNewItemToShoppingList(item)
navController.navigate("ItemsList/${changeableParentListId.value}")
}) {
Icon(Icons.Rounded.Done, "Save or Edit the Shopping Item")
}
вот скриншот экрана редактирования:введите описание изображения здесь
1 ответ
Решение
Из экрана редактирования / подробностей вы должны позвонить
navController.popBackStack()
.