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
相关产品推荐
相关产品推荐

