【发布时间】:2021-11-27 02:41:35
【问题描述】:
我有一个带有代表的 SliverList,它为每个项目返回 Row。设计需要这个结果:
这两个孩子是Text和Image。 Image fir 是 BoxFit.cover,我使用 Flexible 为它们提供所需的宽度比。仅当高度大于或等于宽度边界时,我才需要图像边界高度来匹配文本高度(以使其至少保持一个正方形)。
第一个解决方案是使用 LayoutBuilder 读取图像宽度的约束,并将图像放在一个 ConstrainedBox 中,minHeight 为 LayoutBuilder->constraints->maxWidth。
LayoutBuilder(
builder: (context, constraints) => ConstrainedBox(
constraints: BoxConstraints(
minHeight: constraints.maxWidth,
maxHeight: constraints.maxWidth),
child: CachedNetworkImage(
imageUrl: "https://via.placeholder.com/400x300",
fit: BoxFit.cover,
),
),
)
一切都很好,直到文本长于图像宽度,此时图像仍然是正方形并且不会拉伸到整个行高:
第二种解决方案是将 Row 包装在 IntrinsicHeight 小部件中。但这意味着我不能在其中使用 LayoutBuilder。所以我删除了布局构建器,现在我无法访问约束来设置图像 minHeight。图像很好地伸展以填充整个行高度。直到文本太短,导致图像高度低于其宽度:
如何构建此设计以响应可变文本高度?
【问题讨论】:
标签: flutter dart flutter-layout constraints