Pular para o conteúdo principal

hash_and_equals

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

Missing a corresponding override of '{0}'.

Descrição

#

O analisador produz este diagnóstico quando uma classe ou mixin sobrescreve a definição de == mas não sobrescreve a definição de hashCode, ou, ao contrário, sobrescreve a definição de hashCode mas não sobrescreve a definição de ==.

Tanto o operador == quanto a propriedade hashCode dos objetos devem ser consistentes para que uma implementação comum de mapa com hash funcione corretamente. Por isso, ao sobrescrever um dos dois métodos, ambos devem ser sobrescritos.

Exemplo

#

O código a seguir produz este diagnóstico porque a classe C sobrescreve o operador ==, mas não sobrescreve o getter hashCode:

dart
class C {
  final int value;
​
  C(this.value);
​
  @override
  bool operator ==(Object other) =>
      other is C && other.runtimeType == runtimeType && other.value == value;
}

Correções comuns

#

Se você precisar sobrescrever um dos membros, adicione uma sobrescrita do outro:

dart
class C {
  final int value;
​
  C(this.value);
​
  @override
  bool operator ==(Object other) =>
      other is C && other.runtimeType == runtimeType && other.value == value;
​
  @override
  int get hashCode => value.hashCode;
}

Se você não precisar sobrescrever nenhum dos membros, remova a sobrescrita desnecessária:

dart
class C {
  final int value;
​
  C(this.value);
}

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