Dart multi-key sort with nulls last
Dart
typedef Row = ({String name, int? score, int age});
int nullsLast(dynamic a, dynamic b) {
if (a == null && b == null) return 0;
if (a == null) return 1;
if (b == null) return -1;
return (a as Comparable<dynamic>).compareTo(b as Comparable<dynamic>);
}
List<Row> sortRows(List<Row> rows) {
final copy = [...rows];
copy.sort((a, b) {
final byScore = nullsLast(a.score, b.score);
if (byScore != 0) return byScore;
final byAge = nullsLast(a.age, b.age);
if (byAge != 0) return byAge;
return a.name.compareTo(b.name);
});
return copy;
}