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

positional_super_formal_parameter_with_positional_argument

位置指定のスーパーパラメータは、スーパーコンストラクタの呼び出しに位置指定引数がある場合は使用できません。

説明

#

スーパークラスのコンストラクタに渡される位置指定パラメータの一部がスーパーパラメータを使用しているものの、すべてではない場合に、アナライザはこの診断を生成します。

位置指定のスーパーパラメータは、インデックスによってスーパーコンストラクタの位置指定パラメータと関連付けられます。つまり、最初のスーパーパラメータはスーパーコンストラクタの最初の位置指定パラメータと、2番目は2番目と、というようになります。位置指定引数も同様です。位置指定のスーパーパラメータと位置指定の引数の両方があるということは、スーパークラスのコンストラクタの同じパラメータに2つの値が関連付けられていることになり、許可されません。

#

次のコードは、コンストラクタB.newがスーパーパラメータを使用して、Aのスーパーコンストラクタに必要な位置指定パラメータの1つを渡していますが、スーパーコンストラクタの呼び出しで別のパラメータを明示的に渡しているため、この診断を生成します。

dart
class A {
  A(int x, int y);
}

class B extends A {
  B(int x, super.y) : super(x);
}

一般的な修正

#

すべて位置指定パラメータがスーパーパラメータになる場合、通常のパラメータをスーパーパラメータに変換します。

dart
class A {
  A(int x, int y);
}

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

一部の位置指定パラメータがスーパーパラメータにならない場合、スーパーパラメータを通常のパラメータに変換します。

dart
class A {
  A(int x, int y);
}

class B extends A {
  B(int x, int y) : super(x, y);
}