Pular para o conteúdo principal

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 ==:

dart
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:

dart
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:

dart
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:

dart
class C {
  const C();
​
  @override
  bool operator ==(Object other) => true;
}
​
final map = {C(): 0};

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