【问题标题】:Flutter: pop all underlying pages in the screen stackFlutter:弹出屏幕栈中的所有底层页面
【发布时间】:2020-11-08 05:53:35
【问题描述】:

假设在 Flutter 中,我有一个页面屏幕堆栈。屏幕正在显示页面 D,即最顶层页面。

Page D
Page C
Page B
Page A

如果我在页面 D 上执行 Navigator.of(context).popUntil((route) => route.isFirst);,在 build() 方法的第一行,它只会弹出页面 C 和页面 B。

如何也弹出页面 A?

【问题讨论】:

  • 如果你弹出A,那么你会显示什么?你想重新触发它吗?
  • 它会显示页面D,因为它已经在渲染过程中。
  • 在此之后尝试使用Navigator.pop(context)。它将弹出页面 A。
  • route.isFirst 是页面A吗?如果是这样,那么当 popUntil 到达页面 A 并注意到它与 route.first 相同时,它返回 true 并且不会弹出它(它是专有的),尝试使用 'route.pageD' 或其他不在堆栈所以它全部弹出

标签: flutter


【解决方案1】:

在 Flutter 中,页面路由是一个堆栈。在您的示例中,D 是堆栈的顶部,A 是堆栈的底部。如果您向下弹出到 A,则您已从堆栈中清除了其他三个路由。如果您随后尝试弹出 A,您将看到黑屏,因为堆栈中将没有剩余的路由。如果要弹出 A 并显示 D,则需要使用 Navigator.pushReplacementNamed(context, 'D');

【讨论】:

    【解决方案2】:

    从A页,你可以调用:

    Navigator.of(context).pushNamedAndRemoveUntil(
                            A.routeName, (route) => route ==
                            A.routeName);
    

    我认为现在回答您的问题为时已晚,但它可能对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2020-12-11
      • 1970-01-01
      相关资源
      最近更新 更多