在dart中构造函数后的冒号

问题描述 投票:18回答:1

这段代码来自颤动的画廊,我正在努力理解和改编它。我会知道这个语法意味着什么:

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

  }) : textController = new TextEditingController(text: valueToString(valueName));

特别是我知道构造函数之后冒号是什么意思,如果有一种方法来定义另一个TextEditingController,除了已经定义的那个。

constructor dart flutter
1个回答
31
投票

:之后的部分称为“初始化列表。它是一个,分隔的表达式列表,可以访问构造函数参数并可以分配给实例字段,甚至final实例字段。这可以方便地用计算值初始化最终字段。

初始化列表也用于调用: ..., super('foo')等其他构造函数。

由于关于Dart版本1.24,初始化列表也支持assert(...),这对于检查参数值很方便。

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

用户693336在评论中提到的指出:

这也意味着初始化程序列表在构造函数体之前执行。此外,所有超类的初始化列表都在执行任何构造体之前执行。

© www.soinside.com 2019 - 2024. All rights reserved.