const_ map_ key_ not_ primitive_ equality
Detalhes sobre o diagnóstico 'const_map_key_not_primitive_equality' produzido pelo analisador do Dart.
The type of a key in a constant map can't override the '==' operator, or 'hashCode', but the class '{0}' does.
Descrição
#
O analisador emite este diagnóstico quando a classe do objeto usado como chave em um literal de mapa constante implementa o operador
==, o getter hashCode, ou ambos. A implementação de mapas constantes usa tanto o operador
== quanto o getter hashCode, então qualquer implementação diferente das herdadas de
Object exige a execução de código arbitrário em tempo de compilação, o que não é suportado.
Exemplos
#
O código a seguir produz este diagnóstico porque o mapa constante contém uma chave cujo tipo é C, e a classe
C sobrescreve a implementação de ==:
class C {
const C();
@override
bool operator ==(Object other) => true;
}
const map = {C(): 0};
O código a seguir produz este diagnóstico porque o mapa constante contém uma chave cujo tipo é C, e a classe
C sobrescreve a implementação de hashCode:
class C {
const C();
@override
int get hashCode => 3;
}
const map = {C(): 0};
Correções comuns
#
Se você puder remover a implementação de == e de hashCode da classe, faça isso:
class C {
const C();
}
const map = {C(): 0};
Se você não puder remover a implementação de == e de hashCode da classe, torne o mapa não constante:
class C {
const C();
@override
bool operator ==(Object other) => true;
}
final map = {C(): 0};
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ê.