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();
|
||
}
|
||
}
|