flutter - `Padding` 与 `SizedBox` 哪个效率更高?

标签 flutter

背景:

SizedBox 类可用于在小部件之间插入空白空间,例如 SizedBox(height: 8),也可与 Padding 类一起使用EdgeInsets 类,

SizedBox 不能在任何地方使用。

我知道这一点,而且无论在什么地方,它的用途都与 Padding 不同,

但是

我感兴趣的是:

使用ListView.builder,每个子项都包裹在Padding(padding: E​​dgeInsets.对称(vertical: 4)),

对比

使用 ListView.separatedSizedBox(height: 8) 作为分隔符,

好奇心背后的原因:

Padding 必须创建两个(顶部和底部)空白空间,而不是像 SizedBox 那样创建一个空白空间,

真正的问题:

如果我们忽略可以使用 Padding 但不能使用 SizedBox 的情况,那么哪种方法会更有效且推荐实现空白空间的方法,

谢谢你,

最佳答案

您应该考虑的是SizedBox允许您对其子项应用约束。

对于空白区域,它们实际上做同样的事情。最多会有一纳秒的差异,特别是如果代码中的两者都是const

关于ListView.builderListView.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/

相关文章:

flutter - 在Flutter应用程序中集成Paypal付款

flutter - 如何将 Stepper 小部件的背景色更改为透明色?

dart - 如何在 Flutter 中使一些文本可点击(响应点击)?

java - 尝试在现有项目中使用 Flutter 时无法更改配置 ':flutter:releaseApi' 的依赖项

flutter - ListView 变大

flutter - 在多行中显示芯片和文本并 flutter

firebase - 如何从 Firebase 实时数据库 Flutter 解析对象列表

flutter - 在对话框中使用 BLoC : Could not find the correct Provider

flutter_downloader 构建异常

Flutter 元素嵌入第 3 方网站