compare method

  1. @override
dynamic compare(
  1. dynamic lhs,
  2. dynamic rhs
)
override

Implementation

@override
dynamic compare(dynamic lhs, dynamic rhs) {
  if (lhs == null) {
    return rhs == null ? 0 : null;
  } else if (rhs == null) {
    return null;
  }

  if (lhs is num) {
    final rvalue = numberConvert(rhs);
    if (rvalue != null) {
      return (lhs).compareTo(rvalue);
    }
  } else if (lhs is String) {
    final rvalue = stringConvert(rhs);
    if (rvalue != null) {
      return (lhs).compareTo(rvalue);
    }
  } else if (lhs is bool) {
    final rvalue = booleanConvert(rhs);
    return (lhs ? 1 : 0).compareTo(rvalue ? 1 : 0);
  } else if (lhs.runtimeType == rhs.runtimeType) {
    if (lhs is Map && const MapEquality().equals(lhs, rhs)) {
      return 0;
    } else if (lhs is List && const ListEquality().equals(lhs, rhs)) {
      return 0;
    } else if (lhs is Comparable) {
      return (lhs).compareTo(rhs);
    }
  }

  return null;
}