Dart(Flutter)中的常量构造函数

时间:2020-07-09 21:17:25

标签: flutter dart constructor

有人可以解释一下,常量构造函数的优点是什么?如果我有一个StatefulWidget

class X extends StatefulWidget {
  const X(this.a, this.b,...);
  A a;
  B b;
...
}

我不明白为什么使用const。如果我理解正确,const表示它在编译时就知道了,但是它的作用是什么?通常,ab等属性在编译时未知,但在运行时未知,那么const构造函数的意义何在?

1 个答案:

答案 0 :(得分:3)

您当前的代码不能具有const构造函数,因为该类中的某些成员变量未标记为final

const构造函数的目的是,如果在编译时创建具有相同参数的同一类的多个实例(因此所有参数都可以由编译器确定,并且与运行时无关),则它将共享内存中的同一实例。由于所有成员变量均为final,因此才允许这样做。

因此,优点是在特定情况下(例如dart:convert中的某些类)可能会提高性能并改善内存。但是您必须调用const之类的const MyClass();构造函数以实现此const行为。否则,const仍可以像普通构造函数一样用于获取类的普通实例。

我个人会说,如果您有一个仅包含指向其他final对象的const变量的类,那么即使没有创建const构造函数的理由也没有必要如果它永远不会被使用。但是您通常只能对简单的数据类执行此操作。

但是也可以不用一个const构造函数。