メインコンテンツにスキップ

multiple_super_initializers

コンストラクタは、最大で1つの'super'イニシャライザしか持つことができません。

説明

#

アナライザは、コンストラクタのイニシャライザリストに、スーパークラスからのコンストラクタの呼び出しが複数含まれている場合にこの診断を生成します。イニシャライザリストには、明示的または暗黙的な1つの呼び出しが必要です。

#

以下のコードは、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);
}

スーパコンストラクタのいずれかによって達成される初期化がコンストラクタの本体で実行できる場合は、そのスーパー呼び出しを削除し、初期化を本体で実行してください。

dart
class A {
  int? x;
  String? s;
  A.one(this.x);
  A.two(this.s);
}

class B extends A {
  B() : super.one(0) {
    s = '';
  }
}

初期化がスーパークラスのコンストラクタでのみ実行できる場合は、新しいコンストラクタを追加するか、既存のコンストラクタのいずれかを変更して、必要なすべての初期化を1回の呼び出しで実行できるコンストラクタがあるようにしてください。

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, '');
}