flutter - 决定在 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),
)
如果是这样,为什么?它是否取决于哪些元素最有可能在程序中重复出现并因此被规范化?
解决方案
取决于 Widget 树的特定部分在整个应用程序生命周期中保持不变。就像整个 Padding 小部件不会随着时间的推移而改变,因此使其成为常量。如果孩子或子树要改变第二种方法适合
来自 Docs -性能注意事项
如果子树没有更改,则缓存代表该子树的小部件并在每次可以使用时重新使用它。与创建新的(但配置相同的)小部件相比,重用小部件的效率要高得多。将有状态部分分解为带有子参数的小部件是执行此操作的常用方法。
尽可能使用 const 小部件。(这相当于缓存一个小部件并重新使用它。)
使用 const 构建您的小部件
没有 const,子树的选择性重建不会发生。Flutter 在子树中为每个小部件创建一个新实例并调用 build() 浪费宝贵的周期,尤其是在您的构建方法很繁重的情况下。
推荐阅读
- graphql - 如何在 GraphQL 中将多个对象作为数组返回
- android - 是否有可能做到这一点?从选择图像到捕获图像
- javascript - Uncaught SecurityError: Blocked a frame with origin \"null\" from access a cross-origin frame
- python - 如何在我的目录中的所有文件夹上运行子进程?
- python - 在 Python 中使用赋值表达式时如何完成赋值语句“x = y := f(x)”?
- machine-learning - PCANET中的线性层(卷积层)
- pandas - 在多列 DataFrame 上获取日志值
- php - 如何在 Symfony 4 中实现处理程序?
- javascript - 使用 SQL 数据库中的 PHP 和 JavaScript 登录
- git - 如何修复文件`package.json`中命令`git flow`的操作?