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

Flutter递归调用Navigator.push报错:访问已停用Widget祖先不安全

错误原因分析
  • Context失效是核心问题
    你递归调用_chamaformulario时,用的是ListView列表项的BuildContext。ListView.builder是按需渲染的,当列表项滚出可视区域、或者因为前一个表单跳转导致页面状态变化,对应的列表项Widget会被Flutter标记为deactivated(失活)甚至被销毁。这时候再用这个已经失活的Context去调用Navigator.push,Flutter就会报错——因为这个Context对应的Element已经不在稳定的Element树里了,去查找Navigator这类祖先Widget是不安全的。

  • 递归逻辑的Context复用问题
    首次调用时,当前点击的列表项还在可视区域,Context处于活跃状态,所以能正常跳转。但递归到下一个索引时,你大概率复用了之前列表项的Context,或者下一个列表项还没被构建(没进入可视区域),它的Context根本没生成,强行使用就会触发错误。

  • 错误的Context层级选择
    如果你是在列表项的Widget内部定义的_chamaformulario,用的是列表项的局部Context。而Navigator是在页面的根层级(比如Scaffold上层),当列表项被销毁后,这个局部Context无法再正确定位到Navigator的祖先节点,自然会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:04:57