Flutter 颤振:SizedBox Vs Container,为什么要使用一个而不是另一个?
当我开始思考这两个组成部分时,我发现自己在争论为什么我应该选择其中一个而不是另一个。我想到的一些问题:Flutter 颤振:SizedBox Vs Container,为什么要使用一个而不是另一个?,flutter,Flutter,当我开始思考这两个组成部分时,我发现自己在争论为什么我应该选择其中一个而不是另一个。我想到的一些问题: 容器和SizedBox之间有什么区别 我知道容器可以有其他参数,如填充或装饰,但如果我不使用这些参数,为什么我要使用SizedBox而不是容器 它们之间有性能差异吗 多亏了开源的魔力,你不必猜太多 Container基本上只是一个方便的小部件,它有时可以节省您嵌套其他4个小部件的时间。如果将宽度/高度传递到容器中: constraints = (width !=
多亏了开源的魔力,你不必猜太多
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);
}
实际上是一样的。如果只使用
容器
表示宽度/高度,那么性能开销可能非常小。但你肯定无法测量它。。但我还是建议使用SizedBox
,因为它更清晰。imho.我想补充一点,SizedBox
不仅更简单,而且还可以将其设置为const
,而容器
则不能。这可能是你需要的,也可能不是
如果需要带颜色的框,则不能使用
SizedBox
。但是有框
小部件,它介于大小框
和容器
之间:你可以有颜色,它可以被设置为常量
。请注意,我是这个软件包的作者。关于这个问题(链接),我想知道哪一个更适合作为两个文件之间的空白占位符,它们不需要任何参数?嗯,别担心,在这种情况下,用任何合适的方法。实际上,空容器不可能成为性能问题。所以,使用更自然的东西。我个人使用Container()时,我只是想隐藏一些东西,例如用于加载(这基本上只在我懒于加载指示器等的情况下进行原型设计时发生)。如果我想要一个特定的尺寸,我使用SizedBox
。最近我甚至用SizedBox
代替填充物来分隔列
或行
中的项目。。YMMV您能解释一下const
在构建函数中的好处吗?或者指向任何解释其好处的资源?谢谢。当然:Const对象是最终的/不可变的,并且是在编译时创建的。这样你就不会浪费时间去创建它们了。此外,具有相同参数的相同类型的所有常量对象都是相同的实例。因此,您不会浪费内存创建多个。换句话说,const对象使您的程序更快、内存效率更高。哇,感谢您花时间解释这一点!现在,我将更经常地在我的小部件树中使用const
。另外,我昨天才读到,flatter知道元素是否为const,因此可以在重建中跳过它。