此代码来自 flutter 画廊,我正在尝试理解和调整它。我会知道这个语法是什么意思:
class DemoItem<T> {
DemoItem({
this.valueName,
this.hintName,
this.valueSurname,
this.hintSurname,
this.builder,
this.valueToString
}) : textController = new TextEditingController(text: valueToString(valueName));
特别是我会知道构造函数后面的冒号是什么意思,以及是否有一种方法可以定义另一个 TextEditingController,除了已经定义的那个。
最佳答案
:
之后的部分称为“初始化列表。它是一个,
分隔的表达式列表,可以访问构造函数参数,可以赋值给实例字段,甚至final
实例字段。这对于使用计算值初始化 final 字段很方便。
初始化列表也用于调用其他构造函数,如 : ..., super('foo')
.
从 Dart 版本 1.24 开始,初始化列表也支持 assert(...)
方便检查参数值。
初始化器列表无法从 this
读取,因为 super 构造函数需要在访问 this
有效之前完成,但它可以分配给 this .xxx
.
如用户693336评论中所述指出:
这也意味着初始化列表在构造函数主体之前执行。此外,所有父类(super class)的初始化列表都会在任何构造函数体执行之前执行。
示例(从 https://github.com/dart-lang/language/issues/1394 复制):
class C {
final int x;
final int y;
C(this.x) : y = x + 1;
}
关于constructor - Dart 构造函数后的冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50274605/