ConstrainedBox 可以在父约束的允许范围内修改 child 的约束。

ConstrainedBox 的布局逻辑和 SizedBox 一样,因为它们的 renderObject 都是 RenderConstrainedBox。

ConstrainedBox 即可以给 child tight constrins 也可以给 child loose constrains。

什么时候用 ConstrainedBox

其实需要用 ConstrainedBox 的场景是很少的。因为在每个特定的需求下都有特定的 widget 供我们使用,特定的需求下用特定的 widget 会让我们的代码可读性更好。所以 ConstrainedBox 是用来兜底的,感觉用别的 wdiget 都不合适的时候,可以考虑用 ConstrainedBox。

UnconstrainedBox

UnconstrainedBox 是用来放开约束的,传给 child 的约束是 0 到 infinity,相当于没有约束。

UnconstrainedBox 有一个参数 constrainedAxis 可以控制是放开 width,还是放开 height,还是都放开。

什么时候用 UnconstrainedBox

为了看一下组件的 真实 size,可以用 UnconstrainedBox 给 child 创建一个没有约束的 context,一般用来调试。

幕后的大佬 ConstraintsTransformBox

ConstraintsTransformBox 很神秘,几乎看不到他的踪影,因为 ConstraintsTransformBox 的作用也是用来测试的。UnconstrainedBox 是将 ConstraintsTransformBox 包了一层皮,工作都是 ConstraintsTransformBox 做的。

要放开约束,可以用 UnconstrainedBox,也可以用 ConstraintsTransformBox。ConstraintsTransformBox 可以控制的更细致些。一般来说 用 UnconstrainedBox 就足够了,UnconstrainedBox 会方便些。