import 'package:grouped_list/grouped_list.dart'; import 'package:intl/intl.dart'; /// Sorts [GroupedListView]'s group by newest group int groupSortNewest(String a, String b, String locale) { // TODO: better sorting algorithm lol final yearA = RegExp(r'\d+').firstMatch(a); if (yearA == null) return 0; final yearB = RegExp(r'\d+').firstMatch(b); if (yearB == null) return 0; final compareYears = int.parse(yearB.group(0)!).compareTo( int.parse(yearA.group(0)!), ); if (compareYears != 0) { return compareYears; } final months = List.generate( 12, (index) => DateFormat.MMMM(locale).format( DateTime(2023, index + 1), ), ); final monthA = RegExp('[^0-9 ]+').firstMatch(a); if (monthA == null) return 0; final monthB = RegExp('[^0-9 ]+').firstMatch(b); if (monthB == null) return 0; return months.indexOf(monthB.group(0)!).compareTo( months.indexOf(monthA.group(0)!), ); } /// Sorts [GroupedListView]'s group by oldest group int groupSortOldest(String a, String b, String locale) { // TODO: better sorting algorithm lol final yearA = RegExp(r'\d+').firstMatch(a); if (yearA == null) return 0; final yearB = RegExp(r'\d+').firstMatch(b); if (yearB == null) return 0; final compareYears = int.parse(yearA.group(0)!).compareTo( int.parse(yearB.group(0)!), ); if (compareYears != 0) { return compareYears; } final months = List.generate( 12, (index) => DateFormat.MMMM(locale).format( DateTime(2023, index + 1), ), ); final monthA = RegExp('[^0-9 ]+').firstMatch(a); if (monthA == null) return 0; final monthB = RegExp('[^0-9 ]+').firstMatch(b); if (monthB == null) return 0; return months.indexOf(monthA.group(0)!).compareTo( months.indexOf(monthB.group(0)!), ); }