背景:
SizedBox
类可用于在小部件之间插入空白空间,例如 SizedBox(height: 8)
,也可与 Padding
类一起使用EdgeInsets
类,
SizedBox
不能在任何地方使用。
我知道这一点,而且无论在什么地方,它的用途都与 Padding
不同,
但是
我感兴趣的是:
使用ListView.builder
,每个子项都包裹在Padding(padding: EdgeInsets.对称(vertical: 4))
,
对比
使用 ListView.separated
和 SizedBox(height: 8)
作为分隔符,
好奇心背后的原因:
Padding
必须创建两个(顶部和底部)空白空间,而不是像 SizedBox
那样创建一个空白空间,
真正的问题:
如果我们忽略可以使用 Padding
但不能使用 SizedBox
的情况,那么哪种方法会更有效且推荐实现空白空间的方法,
谢谢你,
最佳答案
您应该考虑的是SizedBox允许您对其子项应用约束。
对于空白区域,它们实际上做同样的事情。最多会有一纳秒的差异,特别是如果代码中的两者都是const,
关于ListView.builder或ListView.separated,两者都有一个用例,具体取决于您想要做什么,例如separated Builder允许您为每个项目自定义小部件等。
如果您有问题,请使用最适合您的内容。 增益是如此之小,您永远不会注意到差异。所以采取更清晰的方式。
***编辑:(以防将来有人来)
经过一些经验之后,我们还应该考虑一件事, padding 创建一个包含在其子级中的空间,因此在按钮、IconButton 的情况下,通常情况下最好使用 padding,因为该空间是可单击的,这将改善用户体验。
示例:
而不是:
const Row(
children: [
/// some of widgets
SizedBox(width: 8,),
InkWell(
child: Icon(Icons.arrow_drop_down),
),
SizedBox(width: 8,),
],
)
用途:
const Row(
children: [
/// some of widgets
InkWell(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Icon(Icons.arrow_drop_down),
),
),
],
)
关于flutter - `Padding` 与 `SizedBox` 哪个效率更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74743545/