isEqualsDeep function
Returns true
if o1
and o2
are equals deeply.
Implementation
bool isEqualsDeep(Object? o1, Object? o2, {ValueEquality? valueEquality}) {
if (identical(o1, o2)) return true;
if (o1 == null) return o2 == null;
if (o2 == null) return false;
if (o1 is List) {
if (o2 is List) {
return isEqualsListDeep(o1, o2, valueEquality: valueEquality);
} else if (o2 is EntityReferenceList) {
return isEqualsListDeep(o1, o2.entities, valueEquality: valueEquality);
}
return false;
} else if (o1 is Map) {
if (o2 is Map) {
return isEqualsMapDeep(o1, o2, valueEquality: valueEquality);
}
return false;
} else if (o1 is Set) {
if (o2 is Set) {
return isEqualsSetDeep(o1, o2, valueEquality: valueEquality);
}
return false;
} else if (o1 is Iterable) {
if (o2 is Iterable) {
return isEqualsIterableDeep(o1, o2, valueEquality: valueEquality);
} else if (o2 is EntityReferenceList) {
return isEqualsIterableDeep(o1, o2.entities,
valueEquality: valueEquality);
}
return false;
} else if (o1 is EntityReferenceList) {
if (o2 is EntityReferenceList) {
return o1 == o2;
} else if (o2 is Iterable) {
return isEqualsIterableDeep(o1.entities, o2,
valueEquality: valueEquality);
}
return false;
}
if (valueEquality != null) {
return valueEquality(o1, o2);
} else {
return o1 == o2;
}
}