在 Flutter 项目里,const 不是单纯的代码风格问题,它会直接影响 Widget 树的创建成本和重建时的比较效率。用得合理,可以让界面在频繁 setState、Provider 通知或 Bloc 状态变化时少做很多重复工作。
为什么 const 有用
Dart 会把编译期常量对象规范化。也就是说,相同的 const Widget 在运行时可以复用同一个实例。Flutter 在更新 Element 树时,如果发现新旧 Widget 是同一个实例,就可以更快地跳过一部分比较与配置更新。
const Text('保存');
const SizedBox(height: 12);
const Icon(Icons.add);
这些静态控件没有依赖运行时变量,就应该优先写成 const。
常见适用场景
- 静态文本、图标、间距组件。
- 构造参数全是常量的自定义 Widget。
- 列表或页面中的固定头部、空状态、分割线。
- StatelessWidget 的构造函数可以声明为 const 时,尽量声明。
class EmptyView extends StatelessWidget {
const EmptyView({super.key});
@override
Widget build(BuildContext context) {
return const Center(
child: Text('暂无数据'),
);
}
}
不要机械添加
如果 Widget 依赖接口数据、主题计算结果、当前时间、随机值或 context 读取结果,就不能为了 const 而改结构。更重要的是,const 解决的是对象创建与比较成本,不会替代状态拆分、列表懒加载、图片缓存或 RepaintBoundary。
实践建议
先打开 prefer_const_constructors 和 prefer_const_literals_to_create_immutables 这类 lint,让工具提醒低风险位置。提交前只接受自然成立的 const,不为了消除提示而把代码拆得更难读。
总结一下:Flutter 性能优化通常不是靠某一个技巧完成的,但 const 是成本很低、收益稳定的基础习惯。它适合从日常编码开始积累,尤其适合组件层级深、状态刷新频繁的页面。