组合导航:如何避免在导航出当前目的地后将其添加到后台队列?

Compose navigation: How to avoid to add the current destination to the back queue once you navigate out of it?

用例如下:

  1. 我有一个已经有几个目的地的后排。
? -> ... -> ?
  1. 显示了一个新目标,我们称它为 Foo 屏幕,目前位于顶部。
? -> ... -> ? -> F
  1. 我想从 Foo 屏幕导航到新的 Bar 屏幕,但是根据特定情况,当导航返回时我想返回 Foo 屏幕或跳过 Foo 屏幕直接转到上一个队列中的屏幕。
if (skipFoo)
   ? -> ... -> ? -> B
else
   ? -> ... -> ? -> F -> B

这可以使用 androidx.navigation 中的 NavOptionsBuilder 实现吗?

我知道我可以使用 popUpTo(0) { inclusive = true } 从堆栈中删除除新目的地以外的所有内容,但我只是想防止在我导航出当前屏幕时添加当前屏幕,并且仅当满足某个条件。

此外,目的地堆栈的内容是动态的(可以随时添加 Foo 屏幕)所以我不能简单地用固定目的地硬编码 popUpToId,因为我不知道堆栈中 Foo 屏幕之前的目的地是什么。

可以使用 popUpTo:

navController.navigate(Screens.Bar.route) {
    popUpTo(Screens.Foo.route) {
        inclusive = true
    }
}