matches method

bool matches(
  1. Map<String, dynamic> data
)

Evaluates this filter against a data map

Implementation

bool matches(Map<String, dynamic> data) {
  final fieldValue = _getNestedValue(data, field);

  switch (operator) {
    case QueryOperator.isEqualTo:
      return fieldValue == value;

    case QueryOperator.isNotEqualTo:
      return fieldValue != value;

    case QueryOperator.isGreaterThan:
      if (fieldValue == null) return false;
      return _compare(fieldValue, value) > 0;

    case QueryOperator.isGreaterThanOrEqualTo:
      if (fieldValue == null) return false;
      return _compare(fieldValue, value) >= 0;

    case QueryOperator.isLessThan:
      if (fieldValue == null) return false;
      return _compare(fieldValue, value) < 0;

    case QueryOperator.isLessThanOrEqualTo:
      if (fieldValue == null) return false;
      return _compare(fieldValue, value) <= 0;

    case QueryOperator.startsWith:
      if (fieldValue == null) return false;
      return fieldValue.toString().startsWith(value.toString());

    case QueryOperator.endsWith:
      if (fieldValue == null) return false;
      return fieldValue.toString().endsWith(value.toString());

    case QueryOperator.contains:
      if (fieldValue == null) return false;
      return fieldValue.toString().contains(value.toString());

    case QueryOperator.arrayContains:
      if (fieldValue is! List) return false;
      return fieldValue.contains(value);

    case QueryOperator.arrayContainsAny:
      if (fieldValue is! List) return false;
      if (value is! List) return false;
      return fieldValue.any((item) => value.contains(item));

    case QueryOperator.whereIn:
      if (value is! List) return false;
      return value.contains(fieldValue);

    case QueryOperator.whereNotIn:
      if (value is! List) return false;
      return !value.contains(fieldValue);

    case QueryOperator.isNull:
      return fieldValue == null;

    case QueryOperator.isNotNull:
      return fieldValue != null;
  }
}