extension ListExtension on List { List> chunks(int chunkSize) { final List> result = >[]; for (var i = 0; i < length; i += chunkSize) { result.add( sublist(i, i + chunkSize > length ? length : i + chunkSize), ); } return result; } // splitMatch, based on the matchFunction, split the input list in two // lists. result.matched contains items which matched and result.unmatched // contains remaining items. ListMatch splitMatch(bool Function(E e) matchFunction) { final listMatch = ListMatch(); for (final element in this) { if (matchFunction(element)) { listMatch.matched.add(element); } else { listMatch.unmatched.add(element); } } return listMatch; } } class ListMatch { List matched = []; List unmatched = []; }