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

非_生成型_暗黙_コンストラクタ

スーパークラス '{0}' の名前のないコンストラクタ('{1}' のデフォルトコンストラクタによって呼び出される)は、生成型コンストラクタである必要がありますが、ファクトリが見つかりました。

説明

#

アナライザは、クラスに暗黙の生成型コンストラクタがあり、スーパークラスに明示的な名前のないファクトリコンストラクタがある場合に、この診断を生成します。サブクラスの暗黙のコンストラクタは、スーパークラスの名前のないコンストラクタを暗黙的に呼び出しますが、生成型コンストラクタは、ファクトリコンストラクタではなく、別の生成型コンストラクタのみを呼び出すことができます。

#

以下のコードは、B の暗黙のコンストラクタが A の名前のないコンストラクタを呼び出しますが、A のコンストラクタはファクトリコンストラクタであり、生成型コンストラクタが必要な場合に、この診断を生成します。

dart
class A {
  factory A() => throw 0;
  A.named();
}

class B extends A {}

一般的な修正

#

スーパークラスの名前のないコンストラクタが生成型コンストラクタである場合、それを生成型コンストラクタに変更してください。

dart
class A {
  A();
  A.named();
}

class B extends A { }

名前のないコンストラクタが生成型コンストラクタでなく、スーパークラスに他の生成型コンストラクタがある場合は、それらのいずれかを明示的に呼び出してください。

dart
class A {
  factory A() => throw 0;
  A.named();
}

class B extends A {
  B() : super.named();
}

使用できる生成型コンストラクタがなく、追加できない場合は、クラスを拡張するのではなく、スーパークラスを実装してください。

dart
class A {
  factory A() => throw 0;
  A.named();
}

class B implements A {}