95 lines
2.7 KiB
Dart
95 lines
2.7 KiB
Dart
|
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();
|
|||
|
}
|
|||
|
}
|