What's a good recipe for overriding hashcode in Dart?
The quiver package provides helper functions hash2
, hash3
, etc., which simplify the task of implementing hashCode
, with some assurance that it works properly under the Dart VM and when compiled to JavaScript.
import 'package:quiver/core.dart';
class Person {
String name;
int age;
Person(this.name, this.age);
bool operator ==(o) => o is Person && name == o.name && age == o.age;
int get hashCode => hash2(name.hashCode, age.hashCode);
}
Also see this post for a slightly lengthier discussion.
The equatable package can help
import 'package:equatable/equatable.dart';
class Person extends Equatable {
final String name;
final int age;
Person(this.name, this.age);
@override
List<Object> get props => [name, age];
}
Now Person will use ==
and hashCode
from Equatable, which takes props
list that you give
I recomend "equatable" plugin
https://pub.dev/packages/equatable
Example:
Raw mode:
class Person {
final String name;
const Person(this.name);
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is Person &&
runtimeType == other.runtimeType &&
name == other.name;
@override
int get hashCode => name.hashCode;
}
With equatable :
import 'package:equatable/equatable.dart';
class Person extends Equatable {
final String name;
Person(this.name);
@override
List<Object> get props => [name];
}