From 4eab7e2743eb383c0883aaa0830dca2fd89abcca Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 12 Jun 2026 12:24:02 +0200 Subject: [PATCH] added controller to handle tasks globally --- lib/service/task_controller.dart | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lib/service/task_controller.dart diff --git a/lib/service/task_controller.dart b/lib/service/task_controller.dart new file mode 100644 index 0000000..608b29c --- /dev/null +++ b/lib/service/task_controller.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart' show ChangeNotifier; + +import '../model/repositories/interfaces/task_repository.dart'; +import '../model/task.dart'; + +class TaskController extends ChangeNotifier { + TaskController(TaskRepository repository) : _repository = repository { + Future.wait([ + _loadTaskOrder(), + _loadTasks(), + ]).whenComplete(() => notifyListeners()); + } + + final TaskRepository _repository; + + final List _tasks = []; + final List _taskOrder = []; + + List get orderedTasks { + final lookup = {for (final task in _tasks) task.id: task}; + + return _taskOrder.map((id) => lookup[id]!).toList(); + } + + Future reorderTask(int oldIndex, int newIndex) async { + final taskId = _taskOrder.removeAt(oldIndex); + _taskOrder.insert(newIndex, taskId); + _repository.saveTaskOrder(_taskOrder); + } + + Future saveTask(Task task) async { + await _repository.saveTask(task); + await _loadTasks(); + await _loadTaskOrder(); + notifyListeners(); + } + + Future _loadTasks() async { + _tasks.clear(); + return _repository.loadTasks().then((value) => _tasks.addAll(value)); + } + + Future _loadTaskOrder() async { + _taskOrder.clear(); + return _repository.loadTaskOrder().then( + (value) => _taskOrder.addAll(value), + ); + } +}