gpt4 book ai didi

android - 在flutter中设置childAspectRatio的正确方法

转载 作者:IT老高 更新时间:2023-10-28 12:42:10 25 4
gpt4 key购买 nike

在 flutter 中计算 SliverGridDelegateWithFixedCrossAxisCountchildAspectRatio 的正确方法是什么。如何管理与所有设备兼容并应在横向和纵向中工作的每个 View 的正确高度

GridView.builder(
physics: BouncingScrollPhysics(),
padding: const EdgeInsets.all(4.0),
itemCount: snapshot.data.results.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: itemCount,
childAspectRatio: 0.501,
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,
),
itemBuilder: (BuildContext context, int index) {
return GridTile(
child: _buildGridItem(context, snapshot.data.results[index]));
});

最佳答案

免责声明:这是对 GridView 工作原理的理论解释。建议的解决方案不是为重内容而设计的。使用我在此处描述的 GridView 理论来构建您想要的布局。

让我从 crossAxisCount 开始,它应该被解释为表格中的列数。

例如crossAxisCount: 3,

|  cell-1  ||  cell-2  ||  cell-3  |
------------------------------------ // new row after every 3 cells
| cell-4 || cell-5 || cell-6 |

flutter 对 crossAxisCount: N, 的作用是尝试在一行中精确匹配 N 个单元格。因此,单个单元格的宽度将等于网格宽度除以 N

例如crossAxisCount: 3, -> cellWidth = parentWidth/3 (伪代码)


现在,接下来是使用您最初的问题所涉及的 childAspectRatio 计算单元格的高度。

例如cellWidth = parentWidth/crossAxisCount & cellHeight = cellWidth/childAspectRatio.

这样,您应该将 childAspectRatio 解释为每个单元格的宽度与其高度的比率(反之亦然)。


我假设您注意到 GridView在异常结构化的布局方面相当有限。

如果你真的认为 GridView对于您要构建的内容来说还不够 - 我建议使用其他支持多个子布局的小部件。例如,我使用 Wrap小部件显示非常流畅的内容,其中每个元素都有自己的动态宽度和高度。

我不知道您需要什么类型的布局,但如果是非常动态/流畅但轻巧的概念,您可以尝试使用 Wrap :

@override
Widget build(BuildContext context) {
final mediaQuery = MediaQuery.of(context);
return SingleChildScrollView(
child: Wrap(
children: List.generate(totalItemsToDisplay, (index) {
final cellWidth = mediaQuery.size.width / 3; // Every cell's `width` will be set to 1/3 of the screen width.
return SizedBox(
width: cellWidth,
// You can either use some static number for `height`, or set ratio to cellWidth.
// Setting `height` to `null` should work too, which would make height of a cell auto-resizable according to its content.
height: 123,
child: ...,
);
})
)
);
}

但是,我不建议使用它来显示大量数据。

如果您的目标是显示一组帖子/文章/图片等,这最初意味着结构化的大量内容 - 我建议使用 GridView通过 childAspectRatio 标准化单元格高度。

关于android - 在flutter中设置childAspectRatio的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56071625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com