flutter - Flutter:SizedBox Vs Container,为什么使用一个而不是另一个?
问题描述
当我开始考虑这两个组成部分时,我发现自己在争论为什么我应该使用一个而不是另一个。我想到的一些问题:
Container 和 SizedBox 有什么区别?
我知道 Container 可以有其他参数,如填充或装饰,但如果我不使用这些参数,我为什么要使用 SizedBox 而不是 Container?
它们之间有性能差异吗?
解决方案
小更新:当用于空格时,现在甚至会出现一个 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
,因为它更清晰。恕我直言。
推荐阅读
- html - 我可以链接到不同页面上的特定图像吗?
- ruby-on-rails - Rails 生成设计安装问题(LoadError 文件)
- java - Spring boot - “一对多”属性值类型不应为错误
- javascript - 打字稿:数组中的自定义groupBy
- python - Django -JSON 在集成贝宝时无法序列化类型错误
- nginx - 通过 GKE 上的 NGINX Ingress 启用安全的 websocket 连接
- react-native - 如何使用 NativeDriver 在 onScroll 中设置多个 Animated.Values?
- ruby - 无法在 macOS 中安装 cocoapods
- c# - 如何批处理 IAsyncEnumerable
,在连续批次之间执行最大间隔策略? - recursion - 请帮我通过递归解决以下问题