multiple_super_initializers
一个构造函数最多只能有一个 'super' 初始化器。
描述
#当构造函数的初始化列表包含对超类中多个构造函数的调用时,分析器会产生此诊断信息。初始化列表必须且只能包含一个这样的调用,它可以是显式的或隐式的。
示例
#以下代码会产生此诊断信息,因为类 B
的构造函数的初始化列表同时调用了超类 A
中的 one
和 two
构造函数
dart
class A {
int? x;
String? s;
A.one(this.x);
A.two(this.s);
}
class B extends A {
B() : super.one(0), super.two('');
}
常见修复方法
#如果其中一个超类构造函数可以完整初始化实例,则移除另一个
dart
class A {
int? x;
String? s;
A.one(this.x);
A.two(this.s);
}
class B extends A {
B() : super.one(0);
}
如果其中一个超类构造函数实现的初始化可以在构造函数体中完成,则移除其 super 调用,并在构造函数体中执行初始化
dart
class A {
int? x;
String? s;
A.one(this.x);
A.two(this.s);
}
class B extends A {
B() : super.one(0) {
s = '';
}
}
如果初始化只能在超类中的构造函数中执行,则要么添加一个新的构造函数,要么修改现有构造函数之一,以便存在一个允许在单次调用中完成所有必需初始化的构造函数
dart
class A {
int? x;
String? s;
A.one(this.x);
A.two(this.s);
A.three(this.x, this.s);
}
class B extends A {
B() : super.three(0, '');
}