PIbd-31_MasenkinMS_PMU/lib/task_provider.dart

95 lines
2.7 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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