我使用compose-navigation
(alpha09)来处理可合成对象之间的导航
我想在移动到下一个目的地时删除 * 启动画面 *(我不想按 * 返回键 * 返回启动画面)
以下尝试未按预期工作:
navHostController.navigate(Route.login.id) {
navHostController.graph.clear()
}
navHostController.navigate(Route.login.id)
navHostController.graph.clear()
val currentDest = navHostController.currentDestination
navHostController.navigate(Route.login.id)
if (currentDest != null) {
navHostController.graph.remove(currentDest)
}
那么,我如何删除启动画面,然后移动到下一个?
8条答案
按热度按时间pokxtpni1#
在Jetpack Compose
1.0.0-rc01
中导航并从回栈中删除以前的Composable您可以用途:上述代码将从
Splash
屏幕导航到Login
,并弹出所有内容,包括Splash
屏幕。导航到可组合文档- docs
rdlzhqv92#
适用于v1.0.0-α 09(和1.0稳定版本)
使用
popUpTo(0)
可以在导航到下一个目标之前清除堆栈。pvabu6sv3#
对于不需要了解当前路线的一致可重用函数,请使用此NavOptionsBuilder扩展函数
^类似于其他答案,popUpTo当前路径,但不需要命名特定的当前路径,而是从backstack条目中获取。
现在您可以这样使用它:
^该示例导航到Login,并且应该清除它之前的整个堆栈。
0h4hbjxa4#
用于清除所有返回堆栈
要从堆栈中删除多个可组合屏幕,请使用以下代码段
或将Home保留在后栈
z31licg05#
喷气背包组合
v1.0.5
dl5txlt96#
要清除反向堆栈,只需创建这个
Extension
函数,并在任何适用的地方重用它。ukqbszuj7#
经过这么多次尝试,我已经找到了更好的方法来清除回栈在注销的情况下.大多数生产应用程序将清除启动或登录屏幕,只要我们导航到主屏幕,将有多种方式降落到主屏幕以及.
所以,我们可能不知道执行popupTo的初始屏幕。如果有底部栏,那么故事也会太难。
这里有一个魔术可以工作的所有场景
gfttwv5a8#
我发现的解决方案是避免硬编码0,您可以使用navHostController.backQueue中的第一个元素,并将其id传递给popUpTo:
有关详细信息,请参阅https://medium.com/@banmarkovic/jetpack-compose-clear-back-stack-popbackstack-inclusive-explained-14ee73a29df5的详细说明