【发布时间】:2020-11-15 01:54:42
【问题描述】:
必须连续显示 3 个项目:图像和下面的描述,所以它基本上是 Columns 的 Row。描述大小各不相同,可以超过或小于图像的宽度。如果需要,这些图像必须均匀排列,说明多行。
所以朴素的代码大致是这样的:
@override
Widget build(BuildContext context) => Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
for (final item in items)
Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Image.asset(item.depiction),
Text(
item.name,
textAlign: TextAlign.center,
),
],
)
],
);
问题是Column 的大小是由文本大小的宽度决定的,如果它超过了图像的大小,那么Row 中的图像间隔不均匀。我看到的解决方案是将Column 的宽度限制为Image 的宽度,例如使用某种Builder 小部件,但它似乎根本不对。
我尝试用Expanded 包裹所有Row 的孩子,但随后spaceAround 没有任何效果,因为所有孩子的大小都为Row 的1/3,并且此间距至关重要,其中可用空间的值应为row.length - 3 * image.size(伪代码给出一个总体思路)。用Flexible 包裹Column 并将stretch 交叉轴对齐设置为相同的Column 会产生相同的效果——Column 的大小为Row 长度的1/3。
将Text 宽度限制为图像宽度为maxWidth 的正确方法是什么?
图片:
在第三个Row 中它可以正常工作,因为Text 的宽度小于图像的宽度。
第二个RowText的宽度大于图片的宽度,所以Column的大小是一行文字宽度,图片的布局不等于前一个。
第一个Row 是我希望第二个Row 呈现的方式,在此示例中,它只是分离的(\n) 描述,导致我寻求的视觉效果。
【问题讨论】:
-
您可以添加图片以便我正确理解您的问题吗?
-
@HardikKumar 添加了
-
你为什么不用gridview。对于图片上显示的布局,gridview 是最好的方法
-
@delmin 上面有一个逻辑可以解释为
here is a row of items of the same category, please pick one of them,所以Row(或水平ListView)对于这样的组织来说在这里很方便。不过可以改。但我看不出它对间距有什么帮助,因为需要自适应spaceAround策略,并且“自适应”是指它计算可用空间(layout.width - image.width * 3)并相应地为子空间留出空间(这样我们得到freeSpace / 4; image1; freeSpace / 4; image2; freeSpace / 4; image3; freeSpace / 4); is it possible withGridView`? -
据我正确理解,gridview 是您想要的。如果您希望所有列的大小完全相同,我相信 gridview 可以实现所有这些。那 gridview 的作用......我可能误解了你的问题,但我仍然相信 gridview 是要走的路
标签: flutter dart flutter-layout