You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter导航栈问题:从第六页跳转第三页并清理中间页面

Flutter导航栈处理:保留前两页并跳转至第三页

你的现有代码存在问题:(Route<dynamic> route) => route.isFirst这个判断条件会移除所有非第一页的路由,之后再push新的第三页,最终导航栈里只会剩下第一页和新的第三页,不符合你要保留第一、第二、第三页的需求。

根据你的需求,分两种场景给出解决方案:

场景1:回到栈中已有的第三页(复用原页面实例)

这种方式直接弹出第四、第五、第六页,回到原本的第三页,最终栈结构为「第一页→第二页→第三页」,是更贴合需求的写法:

// 用命名路由的方式(推荐)
Navigator.of(context).popUntil((route) => route.settings.name == '/third');

// 如果没使用命名路由,可通过页面类型判断
Navigator.of(context).popUntil((route) => route.widget is thirdScreen);

场景2:新建第三页实例并保留前两页

如果你需要创建一个全新的第三页实例,同时保留第一、第二页,修改pushAndRemoveUntil的判断条件即可:

Navigator.of(context).pushAndRemoveUntil(
  MaterialPageRoute(builder: (context) => const thirdScreen()),
  (Route<dynamic> route) {
    // 保留第一页和第二页,可根据实际情况用命名路由或页面类型判断
    return route.isFirst || route.settings.name == '/second';
    // 非命名路由写法:return route.widget is firstScreen || route.widget is secondScreen;
  },
);

内容的提问来源于stack exchange,提问作者Naimish Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:05:02