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

