Dart/Flutter: How to Check two Maps for equal or not

This tutorial shows multiple examples of how to compare two maps for equal or not in Dart and Flutter programming.

  • Compare Two maps equal in dart and flutter
  • Check for equal comparison of nested maps in dart and flutter

The map contains key and value pairs.

If two maps are equal, then they should satisfy the below things

  • key and value pairs in both maps are equal
  • Length of both maps is equal
  • Order of keys and values is also not important.

How to check if maps are equal or not in Dart?

There are multiple ways to compare whether two maps are equal or not

  • using collections MapEquality collections module provides the MapEquality equals() method to compare two plain maps and returns true or false.

    It does not support deeply nested map structures.

Here is an example code

import 'package:collection/collection.dart';

void main() {
  Map map1 = {'id': 1, 'name': 'john'};
  Map map2 = {'id': 2, 'name': 'eric'};
  Map map3 = {'id': 1, 'name': 'john'};
  print(MapEquality().equals(map1, map2)); // false
  print(MapEquality().equals(map1, map3)); // true
  if (MapEquality().equals(map1, map2)) {
    print('map are equal');
  } else {
    print('map are not equal');
  }
}

Output:

false
true
map is not equal

Similarly, you can also do this with the DeepCollectionEquality().equals() method.

import 'package:collection/collection.dart';

void main() {
  Map map1 = {'id': 1, 'name': 'john'};
  Map map2 = {'id': 2, 'name': 'eric'};
  Map map3 = {'id': 1, 'name': 'john'};
  print(DeepCollectionEquality().equals(map1, map2)); // false
  print(DeepCollectionEquality().equals(map1, map3)); // true
  if (DeepCollectionEquality().equals(map1, map2)) {
    print('map are equal');
  } else {
    print('map are not equal');
  }
}

Output:

false
true
map is not equal
  • using quiver collection

In dart, quiver🔗 packages a library for collection utility reusable functions.

It has a mapsEqual function that compares two maps and returns true, if equal, else not equal.

Syntax:

bool mapsEqual(Map? a Map? b)

It takes two maps for comparison of keys and values are equal or not Return value: true or false.

Here is an example code

import 'package:quiver/collection.dart';

void main() {
  Map map1 = {'id': 1, 'name': 'john'};
  Map map2 = {'id': 2, 'name': 'eric'};
  Map map3 = {'name': 'john', 'id': 1};
  print(mapsEqual(map1, map2)); //false
  print(mapsEqual(map1, map3)); //true

  if (mapsEqual(map1, map2)) {
    print('map1 and  map2 are equal');
  } else {
    print('map1 and  map2 are not equal');
  }
}

How to check if Maps are equal or not in Flutter

flutter/foundation.dart has a mapEquals method, does compare each element key and value pairs in the map, and returns an equal comparison result with a boolean type.

bool mapEquals<T>(Map<T>? a Map<T>? b)
  • true: Returns true if two maps are equal with ignoring the order of elements.
  • false: two maps are not equal.

Here, Comparing the two maps, returns true if the two maps are equal.

Here is an example of equality for a maps

import 'package:flutter/foundation.dart';

void main() {
  Map map1 = {'id': 1, 'name': 'john'};
  Map map2 = {'id': 2, 'name': 'eric'};
  Map map3 = {'id': 1, 'name': 'john'};
  print(mapEquals(map1, map2)); // false
  print(mapEquals(map1, map3)); // true
  if (mapEquals(map1, map2)) {
    print('map are equal');
  } else {
    print('map are not equal');
  }
}

How to compare nested maps for equal or not in dart and flutter

This example checks whether two nested maps are equal or not. In this example,

  • Created two nested maps.

  • First checked two maps for comparison using MapEquality().equals(). It returns false as it only checks one level of map structure.

  • DeepCollectionEquality().equals() checks nested maps and compare two maps and return true if nested maps are equal, else returns false

import 'package:collection/collection.dart';

void main() {
  Map map1 = {
    'role': {'name': 'sales', 'id': 1}
  };
  Map map2 = {
    'role': {'name': 'admin', 'id': 2}
  };
  Map map3 = {
    'role': {'name': 'sales', 'id': 1}
  };
  print(MapEquality().equals(map1, map2)); // false
  print(MapEquality().equals(map1, map3)); // false
  print(DeepCollectionEquality().equals(map1, map2)); // false
  print(DeepCollectionEquality().equals(map1, map3)); // true
  if (DeepCollectionEquality().equals(map1, map2)) {
    print('nested map are equal');
  } else {
    print('nested map are not equal');
  }
}

Output:

false
false
false
true
nested maps are not equal

Conclusion

In this tutorial, Learned how to compare two maps and nested maps for comparison and equality in Dart and flutter programming