首页 > 解决方案 > Flutter:SizedBox Vs Container,为什么使用一个而不是另一个?

问题描述

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

  1. Container 和 SizedBox 有什么区别?

  2. 我知道 Container 可以有其他参数,如填充或装饰,但如果我不使用这些参数,我为什么要使用 SizedBox 而不是 Container?

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

标签: flutter

解决方案


小更新:当用于空格时,现在甚至会出现一个 linter 警告来SizedBox代替Container. 主要优势似乎是在运行时SizedBox可以const并且甚至不会创建新实例。


感谢开源的魔力,您不必猜测太多。

Container基本上只是一个方便的小部件,它有时可以让您省去嵌套 4 个其他小部件。如果您将宽度/高度传递给Container

       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 与 a 几乎相同SizedBox,只是更灵活。

ASizedBox会做:

  @override
  RenderConstrainedBox createRenderObject(BuildContext context) {
    return RenderConstrainedBox(
      additionalConstraints: _additionalConstraints,
    );
  }

  BoxConstraints get _additionalConstraints {
    return BoxConstraints.tightFor(width: width, height: height);
  }

IE。它实际上是相同的。如果仅Container用于宽度/高度,则可能会产生非常小的可忽略不计的性能开销。但你肯定无法测量它。但我仍然会推荐SizedBox,因为它更清晰。恕我直言。


推荐阅读