Slide 64
Slide 64 text
Functional Programming in Dart by @passsy (Pascal Welsch)
List sortProducts(List products, SortField sortField, SortOrder sortOrder) {
final copy = products.toList();
var Function(Product a, Product b) compare = sortFunctionsByFieldAsc[sortField]!;
if (sortOrder == SortOrder.desc) {
compare = compare.reverse;
}
copy.sort(compare);
return List.unmodifiable(copy);
}
final Map sortFunctionsByFieldAsc = {
SortField.rating: (a, b) => a.rating.compareTo(b.rating),
SortField.name: (a, b) => a.name.compareTo(b.name),
SortField.discount: (a, b) => a.discount.compareTo(b.discount),
SortField.price: (a, b) => a.price.compareTo(b.price),
};
extension Reverse on int Function(T, T) {
int Function(T, T) get reverse => (a, b) => this(b, a);
}