From 8b333e7bb7ffd078cc0f64ff6ddeee4aaccc6f88 Mon Sep 17 00:00:00 2001 From: mike doornenbal Date: Mon, 11 Dec 2023 10:06:40 +0100 Subject: [PATCH] feat: ability to sort on starttime --- CHANGELOG.md | 2 ++ .../flutter_timetable_view/lib/src/timetable.dart | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21a0fc6..878be45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,3 +34,5 @@ ## [2.0.0] - 03 December 2023 * Create Melos variant of the component where there are multiple packages in the same repository. + +* Added the option to sort on the starttime of an event. diff --git a/packages/flutter_timetable_view/lib/src/timetable.dart b/packages/flutter_timetable_view/lib/src/timetable.dart index ce79695..9b66f25 100644 --- a/packages/flutter_timetable_view/lib/src/timetable.dart +++ b/packages/flutter_timetable_view/lib/src/timetable.dart @@ -36,6 +36,7 @@ class Timetable extends StatefulWidget { this.mergeBlocks = false, this.combineBlocks = true, this.sortByIdAscending = false, + this.sortByStartTime = false, this.onOverScroll, this.onUnderScroll, this.scrollTriggerOffset = 120, @@ -102,6 +103,9 @@ class Timetable extends StatefulWidget { /// Whether or not to sort blocks by their ID in ascending order. final bool sortByIdAscending; + /// Whether or not to sort blocks by their StartTime. + final bool sortByStartTime; + /// The offset which trigger the jump to either the previous or next page. Can't be lower then [scrollJumpToOffset]. final double scrollTriggerOffset; @@ -157,6 +161,12 @@ class _TimetableState extends State { } } + int compareTimeOfDay(TimeOfDay time1, TimeOfDay time2) { + var totalMinutes1 = time1.hour * 60 + time1.minute; + var totalMinutes2 = time2.hour * 60 + time2.minute; + return totalMinutes1.compareTo(totalMinutes2); + } + @override void dispose() { if (widget.scrollController == null) { @@ -181,6 +191,10 @@ class _TimetableState extends State { )); } + if (widget.sortByStartTime) { + blocks.sort((a, b) => compareTimeOfDay(a.start, b.start)); + } + var linePadding = _calculateTableTextSize().width; return SizedBox( width: widget.size?.width,