matches method
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;
}
}