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

Flutter运行报maximum call stack size exceeded错误求解决方案

问题根因

你遇到的栈溢出错误核心来自两处代码问题:

  • home_screen.dart中product getter的无限递归调用
  • Body组件中不合理的内边距配置

具体解决步骤

1. 修复HomeScreen的product属性问题

你写的get product => this.product逻辑是:当调用product属性时,返回this.product会再次触发这个getter本身,形成死循环,直接导致栈溢出。
修改后的完整home_screen.dart代码如下:

import 'package:flutter/material.dart';
import './components/body.dart';
import '../model/product.dart';

class HomeScreen extends StatelessWidget {
  // 定义接收product的存储属性,替换递归getter
  final Product product;
  // 补充构造方法,接收外部传入的product参数
  const HomeScreen({super.key, required this.product});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: buildAppBar(),
      body: buildBody(),
    );
  }

  AppBar buildAppBar() {
    return AppBar(
      backgroundColor: Colors.white,
      elevation: 0,
      leading: IconButton(icon: Icon(Icons.arrow_back, color: Colors.black), onPressed: () {}),
      actions: <Widget>[
        IconButton(icon: Icon(Icons.search, color: Colors.black), onPressed: () {}),
        IconButton(icon: Icon(Icons.shopping_cart, color: Colors.black), onPressed: () {}),
      ],
    );
  }

  Body buildBody() {
    return Body(product: this.product);
  }
}

注意:跳转进入HomeScreen的页面需要传入对应的Product实例,否则会触发参数缺失报错。

2. 修复Body组件的错误内边距

你在Body的Container中写了padding: EdgeInsets.only(top: size.height * 12, ...),size.height是当前设备的屏幕高度,乘以12后相当于12倍屏幕高度的顶部内边距,会导致所有子组件完全超出可视区域,修改为合理数值即可:

// 原错误代码
padding: EdgeInsets.only(top: size.height * 12, left: kDefaultPadding, right: kDefaultPadding),
// 修改后示例,可根据UI需求调整系数,不要超过1
padding: EdgeInsets.only(top: size.height * 0.12, left: kDefaultPadding, right: kDefaultPadding),

修复验证

以上两处修改完成后重新运行项目,栈溢出错误会直接消失,Body组件的内容也会正常显示在可视区域内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:15:03