包含卡片的 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,
我有一个应用程序使用 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,