当我开始考虑这两个组成部分时,我发现自己在争论为什么我应该一个而不是另一个。我想到了一些问题:
Container和SizedBox有什么区别?
我了解Container可以具有其他参数,例如填充或装饰,但是如果我不使用这些参数,为什么我应该使用SizedBox而不是Container?
它们之间有性能差异吗?
答案 0 :(得分:5)
我想补充一点,SizedBox
不仅更简单,而且可以制成const
,而Container
却不能。这可能是或不需要的。
如果您需要一个带有颜色的盒子,则不能使用SizedBox
。但是https://pub.dev/packages/assorted_layout_widgets具有Box
小部件,它介于SizedBox
和Container
之间:可以有颜色,也可以制成const
。>
答案 1 :(得分:3)
感谢开源的魔力,您不必猜测太多。
Container
基本上只是一个便捷小部件,有时可以使您不必嵌套其他4个小部件。如果您将宽度/高度传递到容器中:
constraints =
(width != null || height != null)
? constraints?.tighten(width: width, height: height)
?? BoxConstraints.tightFor(width: width, height: height)
: constraints,
这将导致:
if (constraints != null)
current = ConstrainedBox(constraints: constraints, child: current);
,并且ConstrainedBox实际上与SizedBox
相同,只是更加灵活。
SizedBox
可以做到:
@override
RenderConstrainedBox createRenderObject(BuildContext context) {
return RenderConstrainedBox(
additionalConstraints: _additionalConstraints,
);
}
BoxConstraints get _additionalConstraints {
return BoxConstraints.tightFor(width: width, height: height);
}
即。实际上是相同的。如果仅将Container
用作宽度/高度,则可能会忽略很小的性能开销。但是您肯定会无法测量。.但我仍然建议SizedBox
,因为它更清晰。恕我直言。