Pular para o conteúdo principal

non_generative_implicit_constructor

Detalhes sobre o diagnóstico 'non_generative_implicit_constructor' produzido pelo analisador do Dart.

The unnamed constructor of superclass '{0}' (called by the default constructor of '{1}') must be a generative constructor, but factory found.

Descrição

#

O analisador emite este diagnóstico quando uma classe tem um construtor generativo implícito e a superclasse tem um construtor de fábrica explícito sem nome. O construtor implícito da subclasse invoca implicitamente o construtor sem nome da superclasse, mas construtores generativos só podem invocar outro construtor generativo, não um construtor de fábrica.

Exemplo

#

O código a seguir produz este diagnóstico porque o construtor implícito de B invoca o construtor sem nome de A, mas o construtor em A é um construtor de fábrica, quando um construtor generativo é necessário:

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

Correções comuns

#

Se o construtor sem nome da superclasse puder ser um construtor generativo, então altere-o para um construtor generativo:

dart
class A {
  A();
​
  A.named();
}
​
class B extends A {}

Se o construtor sem nome não puder ser um construtor generativo e existirem outros construtores generativos na superclasse, então invoque explicitamente um deles:

dart
class A {
  factory A() => throw 0;
​
  A.named();
}
​
class B extends A {
  B() : super.named();
}

Se não houver construtores generativos que possam ser usados e nenhum puder ser adicionado, então implemente a superclasse em vez de estendê-la:

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

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.