Pular para o conteúdo principal

deferred_import_of_extension

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

Deferred library imports must hide all extension declarations.

Descrição

#

O analisador emite este diagnóstico quando uma biblioteca importada com um import deferred declara uma extensão que está visível na biblioteca que importa. Os métodos de extensão são resolvidos em tempo de compilação, e extensões de bibliotecas deferred não estão disponíveis em tempo de compilação.

Para mais informações, veja Carregando uma biblioteca de forma preguiçosa.

Exemplo

#

Dado um arquivo a.dart que define uma extensão nomeada:

dart
class C {}
​
extension E on String {
  int get size => length;
}

O código a seguir gera este diagnóstico porque a extensão nomeada está visível para a biblioteca:

dart
import 'a.dart' deferred as a;
​
void f() {
  a.C();
}

Correções comuns

#

Se a biblioteca precisa ser importada como deferred, então adicione uma cláusula show listando os nomes referenciados ou adicione uma cláusula hide listando todas as extensões nomeadas. Adicionar uma cláusula show ficaria assim:

dart
import 'a.dart' deferred as a show C;
​
void f() {
  a.C();
}

Adicionar uma cláusula hide ficaria assim:

dart
import 'a.dart' deferred as a hide E;
​
void f() {
  a.C();
}

Com a primeira correção, o benefício é que, se novas extensões forem adicionadas à biblioteca importada, elas não farão o diagnóstico ser gerado.

Se a biblioteca não precisa ser importada como deferred, ou se você precisa usar o método de extensão declarado nela, então remova a palavra-chave deferred:

dart
import 'a.dart' as a;
​
void f() {
  a.C();
}

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