メインコンテンツにスキップ

hash_and_equals

対応する '{0}' のオーバーライドがありません。

説明

#

クラスまたはミックスインが == の定義をオーバーライドするものの hashCode の定義をオーバーライドしない場合、またはその逆に hashCode の定義をオーバーライドするものの == の定義をオーバーライドしない場合に、アナライザーはこの診断を生成します。

オブジェクトの == 演算子と hashCode プロパティの両方は、一般的なハッシュマップ実装が正しく機能するために一貫している必要があります。その結果、どちらかのメソッドをオーバーライドする場合は、両方をオーバーライドする必要があります。

#

以下のコードは、クラス C== 演算子をオーバーライドするものの、hashCode ゲッターをオーバーライドしないため、この診断を生成します。

dart
class C {
  final int value;

  C(this.value);

  @override
  bool operator ==(Object other) =>
      other is C &&
      other.runtimeType == runtimeType &&
      other.value == value;
}

一般的な修正

#

メンバーのいずれかをオーバーライドする必要がある場合は、もう一方のオーバーライドを追加してください。

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;
}

メンバーのいずれもオーバーライドする必要がない場合は、不要なオーバーライドを削除してください。

dart
class C {
  final int value;

  C(this.value);
}