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

Flutter点击编辑按钮出现Stack Overflow错误的解决方法

解决GoRoute导航到编辑页面时的栈溢出问题

栈溢出的核心原因基本是无限循环触发页面重建/导航,和你用Expanded、SingleChildScrollView没关系,按以下步骤排查:

1. 检查GoRoute路由配置

  • 确认编辑页面的路由没有错误指向自身:比如path: '/edit'对应的builder里,是不是正确返回了编辑页面,而不是在内部又调用了跳转到/edit的代码。
  • 反例:如果在EditPage的initState或者build方法里写了context.go('/edit/$id'),会导致无限循环跳转,直接撑爆栈。

2. 排查编辑页面的Build逻辑

  • 绝对不要在build方法里调用setState,或者触发会导致页面重建的状态变更操作——这会让页面无限重复build,引发栈溢出。
  • 检查状态管理代码(比如Provider、Riverpod):如果编辑页面在build时触发了无限的状态更新,也会导致循环重建。

3. 确认参数传递逻辑

编辑页面需要显示当前条目数据,用GoRoute传递参数时要避免因参数异常导致的重试加载:

// 导航时传递条目数据
context.go('/edit/${item.id}', extra: item);

// 编辑页面获取数据
final drugItem = GoRouterState.of(context).extra as DrugItem;

如果参数获取失败(比如类型转换错误),不要在build里反复重试获取,应该在initState里处理异常逻辑。

4. 调试定位循环点

在编辑页面的生命周期方法里加日志,看页面是不是被反复创建销毁:

@override
void initState() {
  super.initState();
  print('EditPage 初始化');
}

@override
void dispose() {
  print('EditPage 销毁');
  super.dispose();
}

如果日志里不断打印初始化和销毁,说明存在循环导航的问题,重点排查导航触发的时机和条件。

内容的提问来源于stack exchange,提问作者Mohamed Hossam Agha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:00:55