filter method

void filter(
  1. String fieldName, {
  2. dynamic isGreaterThan,
  3. dynamic isGreaterOrEqualThan,
  4. dynamic isLessThan,
  5. dynamic isLessOrEqualThan,
})

{"name" : "x" , "age" : 15} , {"name" : "y" , "age" : 20} , {"name" : "z" , "age" : 25}

filter("age", isGreaterThan: 20) => {"name" : "z" , "age" : 25} filter("age", isGreaterOrEqualThan: 20) => {"name" : "y" , "age" : 20} , {"name" : "z" , "age" : 25}

Implementation

void filter(String fieldName,
    {dynamic isGreaterThan,
    dynamic isGreaterOrEqualThan,
    dynamic isLessThan,
    dynamic isLessOrEqualThan}) {
  var _l = List<bool>.generate(4, (index) {
    if (index == 0) return isGreaterThan != null;
    if (index == 1) return isGreaterOrEqualThan != null;
    if (index == 2) return isLessThan != null;
    if (index == 3) return isLessOrEqualThan != null;
    return false;
  });

  assert(_l.where((element) => element).length == 1, "Only use one");
  assert(
      isGreaterThan != null ||
          isGreaterOrEqualThan != null ||
          isLessThan != null ||
          isLessOrEqualThan != null,
      "Use one condition");

  if (isGreaterThan != null) {
    _filters["\$gt"] ??= <String, dynamic>{};
    _filters["\$gt"][fieldName] = isGreaterThan;
  }
  if (isGreaterOrEqualThan != null) {
    _filters["\$gte"] ??= <String, dynamic>{};
    _filters["\$gte"][fieldName] = isGreaterOrEqualThan;
  }
  if (isLessThan != null) {
    _filters["\$lt"] ??= <String, dynamic>{};
    _filters["\$lt"][fieldName] = isLessThan;
  }
  if (isLessOrEqualThan != null) {
    _filters["\$lte"] ??= <String, dynamic>{};
    _filters["\$lte"][fieldName] = isLessOrEqualThan;
  }
}