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

Kön*_*Wey 4 constructor dart flutter

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

class X extends StatefulWidget {
  const X(this.a, this.b,...);
  A a;
  B b;
...
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么const使用。如果我理解正确的话,const意味着它在编译时是已知的,但是它的用途是什么?通常属性ab等在编译时是未知的,但在运行时是未知的,那么构造函数有什么意义呢const

jul*_*101 7

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

构造函数的目的const是,如果您在编译时使用相同的参数创建同一类的多个实例(因此所有参数都可以由编译器确定,并且不依赖于运行时),它将共享内存中的相同实例。这是允许的,因为所有成员变量都是final.

因此,优点是在特定情况下(如 中的一些类dart:convert)潜在的性能和内存改进。但是您必须const像这样调用构造函数const MyClass();才能获得此const行为。否则, aconst仍然可以像普通构造函数一样使用来获取该类的普通实例。

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

但不创建构造函数也完全可以const