applyFilter method
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);
}