flutter小部件或布局需要添加const?

时间:2019-07-04 04:44:31

标签: flutter dart flutter-layout

例如,我有一个文本小部件。当我插入(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'),
  );
}

3 个答案:

答案 0 :(得分:0)

const的含义在Dart中更加复杂和微妙。 const modifies 。您可以在创建集合时使用它,例如const [1、2、3],以及在构造对象(而不是new)时使用const Point(2,3)。

Hereconst的完整定义

答案 1 :(得分:0)

在Dart中,他们基本上是3个不同的说明符。 conststaticfinal,彼此之间完全不同。

现在,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或每次都这样做。

但是,我还没有看到一个实际的性能分析,该分析表明执行此操作可以提高性能。我并不是说这是错误的,但是您必须在性能与可读性之间取得平衡。