GridView 自动将行高设置为最高的网格项

fhu*_*cho 5 flutter

标题是我想要实现的目标的简化版本:一个 GridView,它根据我提供的原型网格项自动设置行高。原型项目是最高的可能项目,例如,如果网格项目包含文本,则原型将包含最长的可能文本。

一种可能的解决方法是使用 ListView,其中每一行都包含在 IntrinsicHeight 小部件中。但:

  • 行高不一定像 GridView 中那样统一。
  • 根据文档,IntrinsicHeight 效率低下。但不确定有多少,对于简单的布局来说也许可以忽略不计。理想情况下,仅针对一个原型行调用这一“计算内在高度”操作。

Бол*_*аев 0

据我了解,您想要动态设置 GridView 项目的大小。有两种方法,手动计算并根据您的内容每次设置,或者使用SliverGridDelegateWithMaxCrossAxisExtent。因此,在GridView.builder中,您可以添加以下属性:

gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                        maxCrossAxisExtent:
                            200.0, // maximum size of item (on small screens 1 item per row, on bigger as many as can fit with 200.0 px width)
                        childAspectRatio: 5 / 6,
                        crossAxisSpacing: 20,
                        mainAxisSpacing: 20,
                      ),
Run Code Online (Sandbox Code Playgroud)

它使您可以访问额外的工具来管理保持宽高比的 GridView 项目,它还具有不应超过的最大尺寸

  • 这需要一个固定的纵横比,我不知道。纵横比取决于网格宽度、列数和最高项目的固有高度。这些在构建时都是未知的。 (3认同)