equalsValues method

bool equalsValues(
  1. Object? value1,
  2. Object? value2
)

Implementation

bool equalsValues(Object? value1, Object? value2) {
  if (value1 == null) return value2 == null;
  if (value2 == null) return false;
  if (identical(value1, value2)) return true;

  var equals = equalsEntityReferenceBase(value1, value2);
  if (equals != null) return equals;

  if (value1 == value2) return true;

  equals = equalsValuesDateTime(value1, value2);
  if (equals != null) return equals;

  equals = equalsValuesTime(value1, value2);
  if (equals != null) return equals;

  equals = equalsValuesPrimitive(value1, value2);
  if (equals != null) return equals;

  equals = equalsValuesEnum(value1, value2);
  if (equals != null) return equals;

  var collection1 = TypeParser.isCollectionValue(value1) ||
      value1.isEntityReferenceList ||
      value1 is Uint8List ||
      value1 is Int8List;
  var collection2 = TypeParser.isCollectionValue(value2) ||
      value2.isEntityReferenceList ||
      value2 is Uint8List ||
      value2 is Int8List;

  if (collection1 && collection2) {
    return isEqualsDeep(value1, value2, valueEquality: equalsValues);
  }

  value1 = value1.resolveEntityInstance ?? value1;
  value2 = value2.resolveEntityInstance ?? value2;

  var maybeEntity1 = !collection1 && !TypeParser.isPrimitiveValue(value1);
  var maybeEntity2 = !collection2 && !TypeParser.isPrimitiveValue(value2);

  var entityHandler1 = maybeEntity1 ? getEntityHandler(obj: value1) : null;
  var entityHandler2 = maybeEntity2 ? getEntityHandler(obj: value2) : null;

  if (entityHandler1 != null || entityHandler2 != null) {
    Object? id1;
    Object? id2;
    if (entityHandler1 == entityHandler2) {
      id1 = entityHandler1!.getID(value1);
      id2 = entityHandler1.getID(value2);
    } else if (entityHandler1 == null) {
      id1 = value1;
      id2 = entityHandler2!.getID(value2);
    } else if (entityHandler2 == null) {
      id1 = entityHandler1.getID(value1);
      id2 = value2;
    }

    if (id1 == null && id2 == null) {
      return isEqualsDeep(value1, value2);
    } else {
      return isEqualsDeep(id1, id2);
    }
  }

  return false;
}