【发布时间】:2021-05-13 00:20:13
【问题描述】:
我在将 Row() 小部件嵌入为受 ConstrainedBox(maxHeight) 约束的父 Column() 小部件的子部件时遇到问题:150) 小部件。
在这种情况下,我得到一个“BoxConstraints 强制无限高度。”例外。
这是简化的代码(为简洁起见,我只包括 build() 方法):
@override
Widget build(BuildContext context) {
return ConstrainedBox(
constraints: BoxConstraints(maxHeight: 150),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Container(
color: Colors.yellow,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text("Hello"),
Text("There"),
],
),
),
],
),
);
}
我读过一篇建议使用 Expanded() 来解决异常的帖子,所以我用 Expanded() 包装了上面的 Container() 小部件,这很有效,但我的问题是为什么?
我的印象是 Expanded() 只是强制其关联的子窗口小部件占据其父窗口的所有可用空间。但它是否也让其子小部件识别其父小部件的约束?
这个场景的另一个有趣的方面是,如果我用 Expanded() 而不是 Container() 包装 Row(),它将不起作用并且会抛出异常。无论出于何种原因,它必须是 Container()。
非常感谢所有帮助。我喜欢 Flutter,但我仍在为它的布局算法的本质而苦苦挣扎。
/小何塞
【问题讨论】: