首页 > 解决方案 > 决定在 Dart/Flutter 中添加 const 的对象层次结构中的哪个级别

问题描述

在小部件层次结构中,应该如何决定应该在哪一层添加 const?例如,是否如下:

const Padding(
  padding: EdgeInsets.symmetric(
    horizontal: LayoutStyles.horizontalPagePadding
  ),
  child: Icon(Icons.search, color: Colors.black),
)

比,说:

Padding(
  padding: const EdgeInsets.symmetric(
    horizontal: LayoutStyles.horizontalPagePadding
  ),
  child: const Icon(Icons.search, color: Colors.black),
)

如果是这样,为什么?它是否取决于哪些元素最有可能在程序中重复出现并因此被规范化?

标签: flutterdart

解决方案


取决于 Widget 树的特定部分在整个应用程序生命周期中保持不变。就像整个 Padding 小部件不会随着时间的推移而改变,因此使其成为常量。如果孩子或子树要改变第二种方法适合

来自 Docs -性能注意事项

如果子树没有更改,则缓存代表该子树的小部件并在每次可以使用时重新使用它。与创建新的(但配置相同的)小部件相比,重用小部件的效率要高得多。将有状态部分分解为带有子参数的小部件是执行此操作的常用方法。

尽可能使用 const 小部件。(这相当于缓存一个小部件并重新使用它。)

来自关于继承的小部件的中篇文章的摘录

使用 const 构建您的小部件

没有 const,子树的选择性重建不会发生。Flutter 在子树中为每个小部件创建一个新实例并调用 build() 浪费宝贵的周期,尤其是在您的构建方法很繁重的情况下。


推荐阅读