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:
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:
extension E1 on String {
int get charCount => length;
}
extension E2 on String {
int get charCount => length;
}
void f(String s) {
print(E2(s).charCount);
}
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
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ê.