跳到主要内容

field_initializer_redirecting_constructor

重定向构造函数不能有字段初始化器。

描述

#

当重定向构造函数在对象中初始化一个字段时,分析器会生成此诊断。这是不允许的,因为拥有该字段的实例在应该初始化它的时候尚未创建。

示例

#

以下代码生成此诊断,因为构造函数 C.zero 重定向到构造函数 C,并包含一个初始化形式参数,用于初始化字段 f

dart
class C {
  int f;

  C(this.f);

  C.zero(this.f) : this(f);
}

以下代码生成此诊断,因为构造函数 C.zero 重定向到构造函数 C,并包含一个初始化器,用于初始化字段 f

dart
class C {
  int f;

  C(this.f);

  C.zero() : f = 0, this(1);
}

常见修复

#

如果初始化是通过初始化形式参数完成的,则使用普通参数

dart
class C {
  int f;

  C(this.f);

  C.zero(int f) : this(f);
}

如果初始化是在初始化器中完成的,则移除初始化器

dart
class C {
  int f;

  C(this.f);

  C.zero() : this(0);
}