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:
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:
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:
class C {
final int value;
C(this.value);
}
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ê.