0

虽然我已经了解了颤动的列和行是如何工作的,但是我无法解决由一个 Image- 和两个 Textwidgets 组成的列中的以下底部溢出。

小部件排列在一个网格中,应该看起来像这样,但图像更大:

在此处输入图像描述

但是一旦我增加了图像圈的半径,我就会像这里一样得到底部溢出:

在此处输入图像描述

这是抛出错误的小部件的代码:

  @override
  Widget build(BuildContext context) {
    return Container(
        margin: EdgeInsets.only(top: 5, bottom: 5),
        color: Colors.transparent,
        child: Column(children: [
          InkWell(
            child: CircleAvatar(
              backgroundImage: CachedNetworkImageProvider(ingredient.imgSrc,
                  imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet),
              radius: 34,
            ),
            onTap: widget.onTap,
          ),
          Text(
            ingredient.name,
            style: TextStyle(color: textColor),
          ),
          Text(
            "g",
            style: TextStyle(
              color: textColor,
            ),
          ),
        ]));
  }

这是包含图块的父网格小部件:

Card( margin: EdgeInsets.all(10),
            child: new GridView.count(
              //     primary: true,
              //    padding: const EdgeInsets.all(0),
              physics: NeverScrollableScrollPhysics(),
              shrinkWrap: true,
              crossAxisCount: 3,
              mainAxisSpacing: 3,
              padding: EdgeInsets.all(2),
              children: [
                ...getAllIngredientTiles(), // here I assign the widget list
                Padding(
                    child: SizedBox(
                        width: 16,
                        height: 16,
                        child: ElevatedButton(
                          onPressed: _openAddIngredientScreen,
                          child: Icon(
                            Icons.add,
                            size: 36,
                            color: Colors.white,
                          ),
                          style: ButtonStyle(
                            shape: MaterialStateProperty.all(CircleBorder()),
                            padding:
                                MaterialStateProperty.all(EdgeInsets.all(2)),
                            backgroundColor: MaterialStateProperty.all(
                                Colors.teal), // <-- Button color,
                          ),
                        )),
                    padding: EdgeInsets.only(
                        left: 22, right: 22, bottom: 22, top: 0)),
                //
              ],
            ))

我尝试了什么:

  • 用 Container 包裹 Column 并手动设置高度
  • 使用具有固定高度的 Containers/SizedBoxes 将每个小部件包装在 Column 内
  • 用扩展包装

无论我做什么,我都不能让列增加它的高度并使元素适合它。

我阅读了很多其他相关问题,但答案对我不起作用。我将非常感谢任何允许我保留网格并增加图像大小而不会溢出的建议。

4

2 回答 2

0

我找到了一种方法来实现我想要的。为了增加图块的高度,我使用了mainAxisExtentSliverGridDelegateWithFixedCrossAxisCount 的属性:

GridView.builder(
                gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                    crossAxisCount: 3,
                    mainAxisExtent: 150 // <-- this works!
                    ...
                )

这是我增加瓷砖高度和防止底部溢出的唯一工作方式。现在它看起来应该:

在此处输入图像描述

于 2022-02-24T17:07:44.433 回答
0

试试下面的代码希望它对你有帮助。只需将你的小部件更改为我的小部件。

Padding(
  padding: EdgeInsets.all(8),
  child: GridView.builder(
    itemCount: 7,
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
      crossAxisCount: 3,
      crossAxisSpacing: 10,
      mainAxisSpacing: 10,
    ),
    itemBuilder: (context, int index) {
      return Container(
        height: 120,
        width: 100,
        child: Column(
          children: [
            CircleAvatar(
              backgroundColor: Colors.green,
              child: Image.network(
                'https://miro.medium.com/max/1400/1*-6WdIcd88w3pfphHOYln3Q.png',
                height: 50,
                width: 30,
              ),
            ),
            SizedBox(
              height: 10,
            ),
            Text(
              'Product Name',
            ),
            SizedBox(
              height: 10,
            ),
            Text(
              '9',
            ),
          ],
        ),
      );
    },
  ),
),

您的结果屏幕->图片

于 2022-02-24T04:13:11.940 回答