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