From f7a260fbf5c6ea2101999284dc83f51e39cd58e3 Mon Sep 17 00:00:00 2001 From: Ruchi Mulik Date: Fri, 19 Dec 2025 17:20:19 +0530 Subject: [PATCH 1/3] Improve priority sorting by using due date as secondary key --- lib/app/utils/taskfunctions/comparator.dart | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/app/utils/taskfunctions/comparator.dart b/lib/app/utils/taskfunctions/comparator.dart index a20300e2..c396f206 100644 --- a/lib/app/utils/taskfunctions/comparator.dart +++ b/lib/app/utils/taskfunctions/comparator.dart @@ -3,7 +3,6 @@ import 'dart:math'; import 'package:taskwarrior/app/models/json/task.dart'; import 'package:taskwarrior/app/utils/taskfunctions/urgency.dart'; - int Function(Task, Task) compareTasks(String column) { return (a, b) { int? result; @@ -48,6 +47,18 @@ int Function(Task, Task) compareTasks(String column) { var compare = {'H': 2, 'M': 1, 'L': 0}; result = (compare[a.priority] ?? -1).compareTo(compare[b.priority] ?? -1); + // If priorities are equal, sort by due date + if (result == 0) { + if (a.due == null && b.due == null) { + result = 0; + } else if (a.due == null) { + result = 1; + } else if (b.due == null) { + result = -1; + } else { + result = a.due!.compareTo(b.due!); + } + } break; case 'Project': result = (a.project ?? '').compareTo(b.project ?? ''); From 9b39a9186a9c4a177e1892c9de86aa0a75a5f77e Mon Sep 17 00:00:00 2001 From: Ruchi Mulik Date: Fri, 19 Dec 2025 17:20:39 +0530 Subject: [PATCH 2/3] Align replica task priority sorting with due date fallback --- lib/app/modules/home/views/show_tasks.dart | 16 ++++++++++++++-- .../modules/home/views/show_tasks_replica.dart | 12 ++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/app/modules/home/views/show_tasks.dart b/lib/app/modules/home/views/show_tasks.dart index 008b30fb..f287bba1 100644 --- a/lib/app/modules/home/views/show_tasks.dart +++ b/lib/app/modules/home/views/show_tasks.dart @@ -67,9 +67,21 @@ class TaskViewBuilder extends StatelessWidget { case 'Due till-': return b.due!.compareTo(a.due!); case 'Priority-': - return b.priority!.compareTo(a.priority!); + final priorityCompare = b.priority!.compareTo(a.priority!); + if (priorityCompare != 0) return priorityCompare; + // If priorities are equal, sort by due date + if (a.due == null && b.due == null) return 0; + if (a.due == null) return 1; + if (b.due == null) return -1; + return a.due!.compareTo(b.due!); case 'Priority+': - return a.priority!.compareTo(b.priority!); + final priorityCompare = a.priority!.compareTo(b.priority!); + if (priorityCompare != 0) return priorityCompare; + // If priorities are equal, sort by due date + if (a.due == null && b.due == null) return 0; + if (a.due == null) return 1; + if (b.due == null) return -1; + return a.due!.compareTo(b.due!); case 'Project+': return a.project!.compareTo(b.project!); case 'Project-': diff --git a/lib/app/modules/home/views/show_tasks_replica.dart b/lib/app/modules/home/views/show_tasks_replica.dart index 642fbdff..f26e539c 100644 --- a/lib/app/modules/home/views/show_tasks_replica.dart +++ b/lib/app/modules/home/views/show_tasks_replica.dart @@ -60,9 +60,17 @@ class TaskReplicaViewBuilder extends StatelessWidget { case 'Due till-': return (b.due ?? '').compareTo(a.due ?? ''); case 'Priority+': - return (a.priority ?? '').compareTo(b.priority ?? ''); + final priorityCompare = + (a.priority ?? '').compareTo(b.priority ?? ''); + if (priorityCompare != 0) return priorityCompare; + // If priorities are equal, sort by due date + return (a.due ?? '').compareTo(b.due ?? ''); case 'Priority-': - return (b.priority ?? '').compareTo(a.priority ?? ''); + final priorityCompare = + (b.priority ?? '').compareTo(a.priority ?? ''); + if (priorityCompare != 0) return priorityCompare; + // If priorities are equal, sort by due date + return (a.due ?? '').compareTo(b.due ?? ''); default: return 0; } From 19e5ce9a02f984e54fe793129251ce5c4b7bb044 Mon Sep 17 00:00:00 2001 From: Ruchi Mulik Date: Fri, 19 Dec 2025 17:20:55 +0530 Subject: [PATCH 3/3] Ensure widget-level priority sorting falls back to due date --- .../home/controllers/widget.controller.dart | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/app/modules/home/controllers/widget.controller.dart b/lib/app/modules/home/controllers/widget.controller.dart index 4137f137..42849cb6 100644 --- a/lib/app/modules/home/controllers/widget.controller.dart +++ b/lib/app/modules/home/controllers/widget.controller.dart @@ -100,9 +100,21 @@ class WidgetController extends GetxController { case 'Due till-': return b.due!.compareTo(a.due!); case 'Priority-': - return a.priority!.compareTo(b.priority!); + final priorityCompare = a.priority!.compareTo(b.priority!); + if (priorityCompare != 0) return priorityCompare; + // If priorities are equal, sort by due date + if (a.due == null && b.due == null) return 0; + if (a.due == null) return 1; + if (b.due == null) return -1; + return a.due!.compareTo(b.due!); case 'Priority+': - return b.priority!.compareTo(a.priority!); + final priorityCompare = b.priority!.compareTo(a.priority!); + if (priorityCompare != 0) return priorityCompare; + // If priorities are equal, sort by due date + if (a.due == null && b.due == null) return 0; + if (a.due == null) return 1; + if (b.due == null) return -1; + return a.due!.compareTo(b.due!); case 'Project+': return a.project!.compareTo(b.project!); case 'Project-':