diff --git a/lib/features/tasks/presentation/providers/task_provider.dart b/lib/features/tasks/presentation/providers/task_provider.dart index 169b51c..874807a 100644 --- a/lib/features/tasks/presentation/providers/task_provider.dart +++ b/lib/features/tasks/presentation/providers/task_provider.dart @@ -7,7 +7,7 @@ class TaskProvider extends ChangeNotifier { // ===== DONNÉES PRIVÉES ===== final List _tasks = []; TaskFilter _currentFilter = TaskFilter.all; - TaskSort _currentSort = TaskSort.newest; + TaskSort _currentSort = TaskSort.createdAt; bool _isLoading = false; // ===== GETTERS PUBLICS ===== @@ -119,15 +119,15 @@ class TaskProvider extends ChangeNotifier { /// Appliquer le tri actuel List _applySort(List tasks) { switch (_currentSort) { - case TaskSort.newest: + case TaskSort.createdAt: return tasks..sort((a, b) => b.createdAt.compareTo(a.createdAt)); - case TaskSort.oldest: - return tasks..sort((a, b) => a.createdAt.compareTo(b.createdAt)); - case TaskSort.priority: + case TaskSort.dueDate: return tasks - ..sort((a, b) => b.priority.value.compareTo(a.priority.value)); - case TaskSort.alphabetical: - return tasks..sort((a, b) => a.title.compareTo(b.title)); + ..sort((a, b) { + final aDate = a.dueDate ?? DateTime(9999); + final bDate = b.dueDate ?? DateTime(9999); + return aDate.compareTo(bDate); + }); } } @@ -201,10 +201,8 @@ enum TaskFilter { /// Options de tri pour les tâches enum TaskSort { - newest('Plus récentes'), - oldest('Plus anciennes'), - priority('Par priorité'), - alphabetical('Alphabétique'); + createdAt('Date de création'), + dueDate('Date d\'échéance'); const TaskSort(this.label); final String label; diff --git a/lib/features/tasks/presentation/screens/task_list_screen.dart b/lib/features/tasks/presentation/screens/task_list_screen.dart index 9f966ea..1cc485d 100644 --- a/lib/features/tasks/presentation/screens/task_list_screen.dart +++ b/lib/features/tasks/presentation/screens/task_list_screen.dart @@ -15,6 +15,7 @@ import '../widgets/task_filter_chips.dart'; import '../widgets/task_modal.dart'; import '../widgets/task_stats_card.dart'; import '../widgets/task_tile.dart'; +import '../widgets/task_sort_button.dart'; /// Écran principal des tâches avec interface moderne class TaskListScreen extends StatefulWidget { @@ -172,6 +173,7 @@ class _TaskListScreenState extends State ), ), actions: [ + const TaskSortButton(), // ✅ DEBUG : Voir l'état du thème Consumer( builder: (context, themeProvider, child) { diff --git a/lib/features/tasks/presentation/widgets/task_sort_button.dart b/lib/features/tasks/presentation/widgets/task_sort_button.dart new file mode 100644 index 0000000..57fa3d4 --- /dev/null +++ b/lib/features/tasks/presentation/widgets/task_sort_button.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../providers/task_provider.dart'; + +/// Bouton d'options pour trier les tâches +class TaskSortButton extends StatelessWidget { + const TaskSortButton({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (context, taskProvider, child) { + return PopupMenuButton( + initialValue: taskProvider.currentSort, + onSelected: taskProvider.setSort, + icon: const Icon(Icons.sort, color: Colors.white), + itemBuilder: (context) => [ + PopupMenuItem( + value: TaskSort.createdAt, + child: Text(TaskSort.createdAt.label), + ), + PopupMenuItem( + value: TaskSort.dueDate, + child: Text(TaskSort.dueDate.label), + ), + ], + ); + }, + ); + } +}