applyFilter method

List<Map<String, Object?>?> applyFilter(
  1. List<Map<String, Object?>?>? data
)

Implementation

List<Map<String, Object?>?> applyFilter(List<Map<String, Object?>?>? data) {
  if (data == null) return [];
  List<Map<String, Object?>?> filteredData = data;

  for (var filterItem in filterItems) {
    filteredData = filteredData.where((dataItem) {
      if (dataItem == null) return false;
      if (!dataItem.containsKey(filterItem.fieldName)) {
        throw FilterWidgetException(
            'Filter Error: data not contain fieldname \'${filterItem.fieldName}\'');
      }

      if (!mapCondition.containsKey(filterItem.fieldName) ||
          mapCondition[filterItem.fieldName] == null ||
          mapCondition[filterItem.fieldName] == filterItem.allValue) {
        return true;
      }

      if (dataItem[filterItem.fieldName] == null) return false;

      switch (filterItem.filterMode) {
        case EFilterMode.contain:
          return _checkContain(filterItem, dataItem);
        case EFilterMode.equal:
          return _checkEqual(filterItem.fieldName, dataItem);
        case EFilterMode.lessThan:
          return _compared(filterItem, dataItem, (a, b) => a < b);
        case EFilterMode.greaterThan:
          return _compared(filterItem, dataItem, (a, b) => a > b);
        case EFilterMode.range:
          return _checkRange(filterItem, dataItem);
        case EFilterMode.lessOrEqual:
          return _compared(filterItem, dataItem, (a, b) => a <= b);
        case EFilterMode.greaterOrEqual:
          return _compared(filterItem, dataItem, (a, b) => a >= b);
        case EFilterMode.insensitiveAndUnsignedContain:
          return _checkInsensitiveAndUnsignedContain(filterItem, dataItem);
        case EFilterMode.inRangeOrGreaterThanMax:
          return _checkRangeOrGreaterThanMax(filterItem, dataItem);
      }
    }).toList();
  }

  return applySort(filteredData);
}