Flutter:如果约束减少并且大小增加,那么为什么 Expanded 存在?

And*_*ena 2 layout flutter

我试图了解 Flutter 布局系统的工作原理。

我在文档中读到,在 Flutter 上,“约束下降,尺寸上升”,这意味着,父级告诉子级其大小约束是什么,子级告诉父级他们选择的大小。

然后我读了Expanded小部件的定义:

扩展 Row、Column 或 Flex 的子级以便子级填充可用空间的小部件。

问:不Expanded违反上述规则吗?我的理解是,父母不应该告诉孩子它的大小,而这就是Expanded正在做的事情。此外,如果没有Expanded,孩子们已经知道它的约束,并且如果他们愿意的话,它们可以是 100% 的宽度和高度。

我错了什么?

Mar*_*rcG 14

我是文档中那篇文章的作者。

我的理解是父母不应该告诉孩子它的尺寸

不完全是。父级告诉子级约束,即每个子级可以拥有的最小和最大大小。所以孩子不可能有他想要的任何尺寸。它必须在这些限制之内。

如果父级告诉子级它可以具有最小 80 像素和最大 80 像素,那么是的,父级实际上是在告诉子级其大小,因为子级在这里可以给出的唯一答案是 80 像素。这称为“紧”约束。

这正是它Expanded所做的。它告诉孩子它必须在最小和最大时具有与 相同的大小Expanded,以便孩子只能“决定”具有与 相同的大小Expanded

顺便说一句,如果Expanded您使用一个Flexible小部件而不是 the ,它将告诉子级的 max 大小与 相同Flexible,但 min 将设置为 0。这称为“松散”约束。