deepEquals function
Whether a and b are equal, comparing lists, maps and sets by their contents, e.g. [1, 2] equals [1, 2].
Implementation
bool deepEquals(Object? a, Object? b) {
if (identical(a, b)) return true;
if (a is List && b is List) {
if (a.length != b.length) return false;
for (var i = 0; i < a.length; i++) {
if (!deepEquals(a[i], b[i])) return false;
}
return true;
}
if (a is Map && b is Map) {
if (a.length != b.length) return false;
for (final entry in a.entries) {
if (!b.containsKey(entry.key)) return false;
if (!deepEquals(entry.value, b[entry.key])) return false;
}
return true;
}
if (a is Set && b is Set) {
if (a.length != b.length) return false;
return a.every((x) => b.contains(x) || b.any((y) => deepEquals(x, y)));
}
return a == b;
}