Flutter:SizedBox与Container,为什么要用一个而不是另一个?

时间:2019-04-16 20:42:28

标签: flutter

当我开始考虑这两个组成部分时,我发现自己在争论为什么我应该一个而不是另一个。我想到了一些问题:

  1. Container和SizedBox有什么区别?

  2. 我了解Container可以具有其他参数,例如填充或装饰,但是如果我不使用这些参数,为什么我应该使用SizedBox而不是Container?

  3. 它们之间有性能差异吗?

2 个答案:

答案 0 :(得分:5)

我想补充一点,SizedBox不仅更简单,而且可以制成const,而Container却不能。这可能是或不需要的。

如果您需要一个带有颜色的盒子,则不能使用SizedBox。但是https://pub.dev/packages/assorted_layout_widgets具有Box小部件,它介于SizedBoxContainer之间:可以有颜色,也可以制成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,因为它更清晰。恕我直言。