Pular para o conteúdo principal

ambiguous_extension_member_access

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

A member named '{0}' is defined in '{1}' and '{2}', and neither is more specific.

A member named '{0}' is defined in {1}, and none are more specific.

Descrição

#

Quando o código faz referência a um membro de um objeto (por exemplo, o.m(), o.m ou o[i]) em que o tipo estático de o não declara o membro (m ou [], por exemplo), o analisador tenta encontrar o membro em uma extensão. Por exemplo, se o membro for m, o analisador procura extensões que declarem um membro chamado m e cujo tipo estendido seja um tipo ao qual o tipo estático de o pode ser atribuído. Quando há mais de uma dessas extensões no escopo, é selecionada a extensão cujo tipo estendido é o mais específico.

O analisador emite este diagnóstico quando nenhuma das extensões tem um tipo estendido mais específico do que os tipos estendidos de todas as outras, tornando a referência ao membro ambígua.

Exemplo

#

O código a seguir produz este diagnóstico porque não há como escolher entre o membro de E1 e o membro de E2:

dart
extension E1 on String {
  int get charCount => 1;
}
​
extension E2 on String {
  int get charCount => 2;
}
​
void f(String s) {
  print(s.charCount);
}

Correções comuns

#

Se você não precisar das duas extensões, pode excluir ou ocultar uma delas.

Se precisar das duas, selecione explicitamente a que deseja usar com um override de extensão:

dart
extension E1 on String {
  int get charCount => length;
}
​
extension E2 on String {
  int get charCount => length;
}
​
void f(String s) {
  print(E2(s).charCount);
}

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