const_map_key_not_primitive_equality
定数マップのキーの型は、`==` 演算子や `hashCode` をオーバーライドすることはできませんが、クラス `{0}` はオーバーライドしています。
説明
#定数マップリテラルでキーとして使用されるオブジェクトのクラスが、== 演算子、hashCode ゲッター、またはその両方を実装している場合に、アナライザーはこの診断を生成します。定数マップの実装では、== 演算子と hashCode ゲッターの両方が使用されるため、Object から継承されたもの以外の実装は、コンパイル時に任意のコードを実行する必要があり、これはサポートされていません。
例
#以下のコードは、定数マップにキーの型が C である要素が含まれており、クラス C が == の実装をオーバーライドしているため、この診断を生成します。
dart
class C {
const C();
bool operator ==(Object other) => true;
}
const map = {C() : 0};以下のコードは、定数マップにキーの型が C である要素が含まれており、クラス C が hashCode の実装をオーバーライドしているため、この診断を生成します。
dart
class C {
const C();
int get hashCode => 3;
}
const map = {C() : 0};一般的な修正
#クラスから == および hashCode の実装を削除できる場合は、削除してください。
dart
class C {
const C();
}
const map = {C() : 0};クラスから == および hashCode の実装を削除できない場合は、マップを定数でないものにしてください。
dart
class C {
const C();
bool operator ==(Object other) => true;
}
final map = {C() : 0};