compare<T extends Model> method

int compare<T extends Model>(
  1. T a,
  2. T b
)

Implementation

int compare<T extends Model>(T a, T b) {
  final fieldName = getFieldName(field);
  Object? valueA;
  Object? valueB;
  // TODO(Jordan-Nelson): Remove try/catch at next major version bump
  try {
    valueA = a.toMap()[fieldName];
    valueB = b.toMap()[fieldName];
  } on UnimplementedError {
    valueA = a.toJson()[fieldName];
    valueB = b.toJson()[fieldName];
  }
  final orderMultiplier = order == QuerySortOrder.ascending ? 1 : -1;
  if (valueA == null || valueB == null) {
    return orderMultiplier * _compareNull(valueA, valueB);
  } else if (valueA is bool && valueB is bool) {
    return orderMultiplier * _compareBool(valueA, valueB);
  } else if (valueA is Comparable && valueB is Comparable) {
    return orderMultiplier * valueA.compareTo(valueB);
  }
  throw const ModelQueryException(
    'A non-comparable field was used as a QuerySortBy',
  );
}