我正在使用 Compose Destinations 库,我不明白应该做什么才能避免将目的地添加到后台。
说明:用户导航 Screen1 -> Screen2 -> Screen3,然后返回(通过按按钮或后退手势)并进入 Screen1,因为 Screen2 不在返回堆栈中。屏幕 1 <- ... <- Screen3
我在文档中搜索了类似的内容:
navigator.navigate(SecondScreenDestination) {
addToBackStack = false
}
但没有这样的事!
我尝试使用popUp函数来实现我的目标,但我没有找到解决方案。我真的需要帮助。
当您调用
navigate()
时,您可以将该新目的地添加到返回堆栈中。这意味着当您 navigate
到您的 SecondScreen
时,您的后堆栈将变为:
FirstScreen -> SecondScreen
如果您想导航到
ThirdScreen
并也 从返回堆栈中删除 SecondScreen
,这正是 popUpTo
根据 Navigation Compose 文档所做的事情:
navigator.navigate(ThirdScreenDestination) {
popUpTo(SecondScreenDestination.route) {
inclusive = true
}
}
因此,作为这个单一原子操作的一部分,您要做两件事:
将每个目的地弹出到(即
popUpTo
部分)并包括(即inclusive
部分)SecondScreen
。这就是从返回堆栈中删除 SecondScreen
的原因。
导航到
ThirdScreen
,这发生在 popUpTo
完成之后,从而将 ThirdScreen
放在返回堆栈的顶部。
因此你的最终返回堆栈是:
FirstScreen -> ThirdScreen
这可能很旧,但我也遇到了类似的问题。 基本上,我有一个底部导航栏,其中包含项目“A”、“B”、“C”,分别对应于“屏幕 A”、“屏幕 B”、“屏幕 C”。
然后,假设“屏幕 B”有一个按钮“B1”来显示“屏幕 B1”。
现在,当我按此顺序按下选项卡/按钮时
'A' > 'B' > 'C' > 'B' > 'B1'
,我的应用程序将按预期按相同顺序显示相应的屏幕。 但是,当我反复按“返回”时,我希望我的应用程序将从 'Screen B1' > 'Screen B' > 'Screen A' > exit
开始,而不是在最终退出之前遍历返回堆栈中的每个屏幕。