PIbd-31_MasenkinMS_PMU/lib/task_provider.dart

95 lines
2.7 KiB
Dart
Raw Permalink Normal View History

2024-09-11 20:13:39 +04:00
import 'package:flutter/material.dart';
import 'task_model.dart';
class TaskProvider with ChangeNotifier {
List<Task> _tasks = <Task>[];
List<Task> get tasks => _tasks;
// Добавление задачи
void addTask({
required String title,
String? description,
String? category,
DateTime? deadline,
TaskPriority priority = TaskPriority.medium,
}) {
final task = Task(
title: title,
description: description,
category: category,
deadline: deadline,
priority: priority,
);
_tasks.add(task);
notifyListeners();
}
// Удаление задачи
void removeTask(Task task) {
_tasks.remove(task);
notifyListeners();
}
// Изменение состояния задачи
void toggleTaskCompletion(Task task) {
task.isCompleted = !task.isCompleted;
notifyListeners();
}
// Сортировка задач по приоритету и дедлайну
void sortTasks() {
_tasks.sort((a, b) {
// Сравнение по приоритету
if (a.priority == b.priority) {
// Если оба дедлайна не null, сравниваем их
if (a.deadline != null && b.deadline != null) {
return a.deadline!.compareTo(b.deadline!);
}
// Если у одной задачи нет дедлайна, она считается "позднее"
if (a.deadline == null) return 1; // Задачи без дедлайна позже
if (b.deadline == null) return -1; // Задачи с дедлайном раньше
return 0;
}
// Сравнение по приоритету
return a.priority.index.compareTo(b.priority.index);
});
notifyListeners();
}
// Метод для завершения всех задач
void completeAllTasks() {
for (var task in _tasks) {
task.isCompleted = true;
}
notifyListeners();
}
// Асинхронная загрузка задач
Future<void> loadTasks() async {
if (_tasks.isEmpty) {
_tasks = [
Task(
title: "Task 1",
category: "Work",
deadline: DateTime.now().add(Duration(days: 1)),
priority: TaskPriority.high),
Task(
title: "Task 2",
category: "Home",
deadline: DateTime.now().add(Duration(days: 2)),
priority: TaskPriority.medium),
Task(
title: "Task 3",
description: "Optional description",
priority: TaskPriority.low),
Task(
title: "Task 4",
category: "Personal",
priority: TaskPriority.high),
];
}
notifyListeners();
}
}