例如,我有一个文本小部件。当我插入(Alt + Insert)填充时,padding属性的值为const EdgeInsets.all(8.0)
。我不太明白为什么要添加const
。如果所有小部件都与小部件一起添加,则将具有性能。升级?像const Text('text')
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text('text'),
);
}
答案 0 :(得分:0)
const
的含义在Dart中更加复杂和微妙。 const modifies
值。您可以在创建集合时使用它,例如const [1、2、3],以及在构造对象(而不是new)时使用const Point(2,3)。
Here是const
的完整定义
答案 1 :(得分:0)
在Dart中,他们基本上是3个不同的说明符。 const
,static
和final
,彼此之间完全不同。
现在,const
的作用是编译器在编译时尝试计算该变量的值。因此,如果您有类似const CONST_STRING = "String"
的内容,则CONST_STRING
的所有用法将由编译器替换为其值(即“字符串”)。这绝对可以提高性能。但他们的观点在这里。您无法对所有内容都使用const
,因为需要在编译时对其进行访问。
因此,您绝对可以将原始数据类型用作const
,但是对于对象,其构造函数将必须支持const
(请参见EdgetInset构造函数)。
此外,要使构造器const
能够正常运行,必须在编译时构造类的成员变量。
答案 2 :(得分:0)
构造两个相同的编译时常量会产生一个规范的实例:
var a = const ImmutablePoint(1, 1);
var b = const ImmutablePoint(1, 1);
assert(identical(a, b)); // They are the same instance!
https://dart.dev/guides/language/language-tour#using-constructors
换句话说,即使您使用了100次(如果您为构造函数提供了相同的值),也只会以这种方式创建一次填充。我想如果您有很多地方都使用相同的文本,那么也可以将其设置为const或每次都这样做。
但是,我还没有看到一个实际的性能分析,该分析表明执行此操作可以提高性能。我并不是说这是错误的,但是您必须在性能与可读性之间取得平衡。