Group: style
Maturity: stable
Dart SDK: >= 2.6.0 • (Linter v0.1.97)
Since info is static, may be staleFrom Effective Dart:
AVOID overloading operator == and hashCode on classes not marked @immutable
.
If a class is not immutable, overloading operator ==
and hashCode
can
lead to unpredictable and undesirable behavior when used in collections.
BAD:
class B {
String key;
const B(this.key);
@override
operator ==(other) => other is B && other.key == key;
@override
int get hashCode => key.hashCode;
}
GOOD:
@immutable
class A {
final String key;
const A(this.key);
@override
operator ==(other) => other is A && other.key == key;
@override
int get hashCode => key.hashCode;
}
NOTE: The lint checks the use of the @immutable
annotation, and will trigger
even if the class is otherwise not mutable. Thus:
BAD:
class C {
final String key;
const C(this.key);
@override
operator ==(other) => other is C && other.key == key;
@override
int get hashCode => key.hashCode;
}
To enable the avoid_equals_and_hash_code_on_mutable_classes
lint,
add avoid_equals_and_hash_code_on_mutable_classes
under linter > rules in your
analysis_options.yaml
file:
linter:
rules:
- avoid_equals_and_hash_code_on_mutable_classes