【问题标题】:Invalid argument: maximum call for stack size exceeds无效参数:堆栈大小的最大调用超过
【发布时间】:2021-11-12 12:00:26
【问题描述】:

这是我的主屏幕飞镖文件

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

class HomeScreen extends StatelessWidget {
  get product => 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: () {}), //iconbutton
      actions: <Widget>[
        IconButton(icon: Icon(Icons.search, color: Colors.black), onPressed: () {}), //iconbutton
        IconButton(icon: Icon(Icons.shopping_cart, color: Colors.black), onPressed: () {}), //iconbutton
      ], //<widget>
    ); //appBar
  }

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


运行时出现的错误是

获取产品包/shoppingapp/screens/home_screen.dart 6:23

packages/flutter/src/widgets/framework.dart 3363:18 updateChild

packages/flutter/src/widgets/framework.dart 6083:14 mount

packages/flutter/src/widgets/framework.dart 3611:13 inflateWidget

packages/flutter/src/widgets/framework.dart 3363:18 updateChild

packages/flutter/src/widgets/framework.dart 4599:16 performRebuild

packages/flutter/src/widgets/framework.dart 4267:5 重建

packages/flutter/src/widgets/framework.dart 4553:5 [_firstBuild]

packages/flutter/src/widgets/binding.dart 1104:16

packages/flutter/src/widgets/framework.dart 2535:19 buildScope

packages/flutter/src/widgets/binding.dart 1103:12 attachToRenderTree

packages/flutter/src/widgets/binding.dart 936:24 attachRootWidget

packages/flutter/src/widgets/binding.dart 917:7

dart:sdk_internal 25312:11 internalCallback 测试期间在模拟器中显示错误。

无效参数:超过堆栈大小的最大调用

import 'package:flutter/material.dart';
import '../../../model/product.dart';
import '../../../constants.dart';
import 'add_to_cart.dart';
import 'color_and_size.dart';
import 'description.dart';
import 'product_title_with_image.dart';
import 'package:shoppingapp/screens/details/components/counter_with_fav_btn.dart';

class Body extends StatelessWidget {
  final Product product;

  const Body({Key? key, required this.product}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return SingleChildScrollView(
      child: Column(
        children: <Widget>[
          SizedBox(
            height: size.height,
            child: Stack(
              children: <Widget>[
                Container(
                  padding: EdgeInsets.only(top: size.height * 12, left: kDefaultPadding, right: kDefaultPadding), //edgeinsets
                  margin: EdgeInsets.only(top: size.height * 0.3),
                  height: 500,
                  decoration: BoxDecoration(
                    color: Colors.white, //boxdecoration
                    borderRadius: BorderRadius.only(
                      topLeft: Radius.circular(24),
                      topRight: Radius.circular(24),
                    ), //boxdecoration
                  ), //borderradius
                  child: Column(
                    children: <Widget>[
                      ColorAndSize(product: product), //colorand size
                      SizedBox(height: kDefaultPadding / 2), //sizedbox
                      Description(product: product),
                      SizedBox(height: kDefaultPadding / 2), //sizedbox
                      CounterWithFavBtn(), //counterwithfavbtn
                      SizedBox(height: kDefaultPadding / 2), //sizedbox
                      AddToCart(product: product), //addtocart
                    ], //widget
                  ), //column
                ), //container
                ProductTitleWithImage(product: product),
              ], //widget
            ), //stack
          ), //sizedbox
        ], //widget
      ), //column
    ); //singlechildscrollview
  }
}


任何帮助都是有用的 谢谢

【问题讨论】:

  • 您的错误可能在代码的其他地方。你能给我们提供完整的错误堆栈吗?此外,堆栈跟踪可能引用了您的代码的某些部分,然后也向我们展示
  • 这是做什么的? get product =&gt; this.product; 这在我看来就像一个递归 getter,它会符合你的错误
  • 恭喜你有一个实际的堆栈溢出。

标签: flutter dart


【解决方案1】:

你有递归getter

class HomeScreen extends StatelessWidget {
  get product => this.product; // <—

使用这个 lint 规则 recursive getter 避免这种情况再次发生

【讨论】:

  • 这不起作用。这得到了同样的错误。你能告诉任何其他解决方案吗
猜你喜欢
  • 1970-01-01
  • 2020-01-05
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 2014-08-19
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多