包含卡片的 GridView 无法正确计算高度

GridView containing Cards doesn't calculate height correctly

我有一个应用程序使用 GridView 来尝试布置一些 Card。相关代码看起来有点像这样

body: new GridView.count(
  crossAxisCount: 2,
  children: [new Card(
    child: new Column(
      mainAxisSize: MainAxisSize.min,
      children: <Widget>[
        const ListTile(
          leading: const Text("0", style: const TextStyle(
              fontWeight: FontWeight.bold, fontSize: 24.0)),
          title: const Text('Some Heading'),
          subtitle: const Text('My Subtitle'),
        ),
        new ButtonTheme
            .bar( // make buttons use the appropriate styles for cards
          child: new ButtonBar(
            children: <Widget>[
              new FlatButton(
                child: const Text('CALL TO ACTION'),
                onPressed: () {
                  /* ... */
                },
              ),
            ],
          ),
        ),
      ],
    ),
  ),
  // same card repeated
  ],
),

不幸的是,渲染效果不佳:

卡片太高,它们应该在 "CALL TO ACTION" 按钮下方结束。我该如何解决这个问题,并让网格行自动遵循内容的高度?

您的问题是 GridView.count 的图块的默认纵横比为 1.0(即正方形),听起来您希望图块比该值短。

一个快速解决方法是将 childAspectRatio 硬编码为您喜欢的数字。一种更细微的方法是实现一个 SliverGridDelegate 来描述您想要的布局并使用 GridView.custom。您也可以只做一个 ListView 的 2 元素 Row 小部件,根本不使用 GridView

更改 GridView.count 的纵横比应该可以解决问题。下面的代码对我有用。你可以根据需要调整它

 GridView.count(
      ...
      childAspectRatio: 10 / 9,