跳到主要内容

implicit_super_initializer_missing_arguments

隐式调用的来自“{0}”的未命名构造函数具有必填参数。

描述

#

当一个构造函数隐式调用超类的未命名构造函数,且超类的未命名构造函数具有必填参数,并且没有与该必填参数对应的 super 参数时,分析器会产生此诊断信息。

示例

#

以下代码会产生此诊断信息,因为类 B 中的未命名构造函数隐式调用了类 A 中的未命名构造函数,但类 A 中的构造函数有一个名为 x 的必填位置参数。

dart
class A {
  A(int x);
}

class B extends A {
  B();
}

以下代码会产生此诊断信息,因为类 B 中的未命名构造函数隐式调用了类 A 中的未命名构造函数,但类 A 中的构造函数有一个名为 x 的必填命名参数。

dart
class A {
  A({required int x});
}

class B extends A {
  B();
}

常见修复方法

#

如果你可以在子类构造函数中添加参数,那么添加一个与超类构造函数中必填参数对应的 super 参数。新参数可以是必填参数

dart
class A {
  A({required int x});
}

class B extends A {
  B({required super.x});
}

也可以是可选参数

dart
class A {
  A({required int x});
}

class B extends A {
  B({super.x = 0});
}

如果你不能在子类构造函数中添加参数,那么添加一个带有必填参数的显式 super 构造函数调用。

dart
class A {
  A(int x);
}

class B extends A {
  B() : super(0);
}