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

关于Flutter Navigator中popUntil与pushAndRemoveUntil的行为问询

Flutter Navigator两种操作的行为差异分析

场景1的最终行为

执行以下两步操作后:

  1. Navigator.popUntil(context, (route) => route.isFirst);:将路由栈中除首个初始路由之外的所有路由全部弹出,此时栈内仅保留初始路由。
  2. Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=>const Screen1()));:用Screen1替换当前栈内的首个初始路由。

最终路由栈中仅存在Screen1,它成为新的首个路由。

场景2的最终行为

执行Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context)=>const Screen1()),(route) => route.isFirst,);的逻辑是:

  • 先将Screen1推入路由栈;
  • 然后从Screen1下方的路由开始,依次移除不满足route.isFirst条件的路由,直到遇到首个初始路由(该路由满足route.isFirst,会被保留)。

最终路由栈中会同时保留原来的首个初始路由和新推入的Screen1,Screen1位于栈顶位置。

核心差异总结

  • 场景1会替换掉原来的首个初始路由,最终栈内只有Screen1;
  • 场景2会保留原来的首个初始路由,最终栈内是「初始路由 + Screen1」的结构。

内容的提问来源于stack exchange,提问作者Ashish Tandon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:23:11