关于Flutter Navigator中popUntil与pushAndRemoveUntil的行为问询
场景1的最终行为
执行以下两步操作后:
Navigator.popUntil(context, (route) => route.isFirst);:将路由栈中除首个初始路由之外的所有路由全部弹出,此时栈内仅保留初始路由。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
相关产品推荐
相关产品推荐

