Home > Net >  Dart: Comparing two objects of any type to check if they are equal
Dart: Comparing two objects of any type to check if they are equal

Time:01-04

I use the following code to compare two Person object using the overridden == operator:

class Person {
  String ssn;
  String name;

  Person(this.ssn, this.name);

  bool operator ==(Object other) {
    return identical(this, other) ||
      other is Person && 
      ssn == other.ssn &&
      name == other.name;
  }
  
  @override int get hashCode => (ssn   name).hashCode;
}

main() {
  var bob =  Person('111', 'Bob');
  var robert =  Person('123', 'Robert');

  print(bob == robert); // false
}

However, as this code works perfectly with Person objects, is there a way to write one == operator function that works for any two types to compare them to check if they are equal or not ?

CodePudding user response:

If your question is how not to write equals and hashCode implementation for all your classes then the answer would be there is no way right now. But you can simplify this process with packages. For example, you can use Equatable package then your class would look like this:

import 'package:equatable/equatable.dart';

class Person extends Equatable {
  String ssn;
  String name;

  Person(this.ssn, this.name);

  @override
  List<Object> get props => [name, ssn];
}

  • Related