Constructor dart中构造函数后的冒号

Constructor dart中构造函数后的冒号,constructor,dart,flutter,Constructor,Dart,Flutter,这段代码来自FlatterGallery,我正在努力理解和修改它。我知道这句话的意思: class DemoItem<T> { DemoItem({ this.valueName, this.hintName, this.valueSurname, this.hintSurname, this.builder, this.valueToString }) : textController = new TextEditingCo

这段代码来自FlatterGallery,我正在努力理解和修改它。我知道这句话的意思:

class DemoItem<T> {
  DemoItem({
    this.valueName,
    this.hintName,
    this.valueSurname,
    this.hintSurname,
    this.builder,
    this.valueToString

  }) : textController = new TextEditingController(text: valueToString(valueName));
类DemoItem{
演示项目({
这个.valueName,
这是hintName,
这个姓,
这是hintSurname,
这个建筑商,
这个.valueToString
}):textController=newtexteditingcontroller(text:valueToString(valueName));

特别是,我知道构造函数后面的冒号是什么意思,以及除了已经定义的TextEditingController之外,是否还有其他定义TextEditingController的方法。

调用
后面的部分“初始值设定项列表。它是一个
分隔的表达式列表,可以访问构造函数参数,并可以分配给实例字段,甚至是
final
实例字段。这便于使用计算值初始化final字段。”

初始值设定项列表还用于调用其他构造函数,如
:…,super('foo')

由于Dart版本1.24,初始值设定项列表还支持
assert(…)
,这便于检查参数值

初始化器列表无法从
this
读取,因为在访问
this
有效之前需要完成超级构造函数,但它可以分配给
this.xxx

如用户693336的评论中所述,指出:

这也意味着初始值设定项列表在构造函数体之前执行。所有超类的初始值设定项列表也在任何构造函数体执行之前执行

示例(复制自):

C类{
最终整数x;
最终INTY;
C(this.x):y=x+1;
}

要详细说明其他答案并完成语法,还可以为构造函数提供一个真实的主体以及初始化器代码

NonNegativePoint(this.x, this.y) : assert(x >= 0), assert(y >= 0) {
    print('I just made a NonNegativePoint: ($x, $y)');
}
^这里的断言发生在主体执行之前

另一个用例是在body执行之前为final字段赋值

final num x;
final num y;

Point.fromJson(Map<String, num> json) : x = json['x'], y = json['y'] {
    print('In Point.fromJson(): ($x, $y)'); 
}
final num x;
最终数值y;
fromJson(映射json):x=json['x'],y=json['y']{
print('In Point.fromJson():($x,$y)');
}

您的答案非常清晰、详尽。我找到了答案并解决了我的问题。谢谢!很高兴听到:)@lrn很高兴知道
this.foo
这样的参数现在也可以在初始值设定项列表中访问。这与为构造函数提供一个主体并在那里初始化变量有何不同?这个答案很简单在上,但我觉得可以通过明确指出初始化器在构造函数体之前运行来改进。这在当前答案中暗示,但值得说明。这允许在构造函数体执行之前计算或初始化某些字段。如果初始化器列表中的断言失败,执行器是否会是否停止构造函数的初始化?