Pular para o conteúdo principal

recursive_constructor_redirect

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

Constructors can't redirect to themselves either directly or indirectly.

Descrição

#

O analisador emite este diagnóstico quando um construtor redireciona para si mesmo, direta ou indiretamente, criando um loop infinito.

Exemplos

#

O código a seguir gera este diagnóstico porque os construtores generativos C.a e C.b redirecionam um para o outro:

dart
class C {
  C.a() : this.b();
  C.b() : this.a();
}

O código a seguir gera este diagnóstico porque os construtores de fábrica A e B redirecionam um para o outro:

dart
abstract class A {
  factory A() = B;
}
​
class B implements A {
  factory B() = A;
  B.named();
}

Correções comuns

#

No caso de construtores generativos, quebre o ciclo fazendo com que pelo menos um dos construtores não redirecione para outro construtor:

dart
class C {
  C.a() : this.b();
  C.b();
}

No caso de construtores de fábrica, quebre o ciclo fazendo com que pelo menos um dos construtores de fábrica faça uma das seguintes coisas:

  • Redirecionar para um construtor generativo:
dart
abstract class A {
  factory A() = B;
}
​
class B implements A {
  factory B() = B.named;
  B.named();
}
  • Não redirecionar para outro construtor:
dart
abstract class A {
  factory A() = B;
}
​
class B implements A {
  factory B() {
    return B.named();
  }
​
  B.named();
}
  • Não ser um construtor de fábrica:
dart
abstract class A {
  factory A() = B;
}
​
class B implements A {
  B();
  B.named();
}

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ê.