From ec4efff01ae13f1fd6d6a1ab97bd7d2caec4d9e1 Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 12 Jun 2026 14:30:06 +0200 Subject: [PATCH] refactored storage system that controller handles logic checks --- .../interfaces/task_repository.dart | 20 ++++-- lib/model/repositories/local_repository.dart | 72 ++++++++++++------- lib/service/task_controller.dart | 23 ++++-- 3 files changed, 81 insertions(+), 34 deletions(-) diff --git a/lib/model/repositories/interfaces/task_repository.dart b/lib/model/repositories/interfaces/task_repository.dart index 1e3a03d..703a4de 100644 --- a/lib/model/repositories/interfaces/task_repository.dart +++ b/lib/model/repositories/interfaces/task_repository.dart @@ -1,15 +1,27 @@ import '../../task.dart'; abstract class TaskRepository { + // Create + + Future createTask(Task task); + + Future createTaskOrderEntry(String taskOrder); + + // Read + Future> loadTasks(); - Future> loadTaskOrder(); + Future> loadTaskOrder(); - Future saveTaskOrder(List taskOrder); + // Update - Future saveTask(Task task); + Future updateTask(Task task); - Future saveTasks(List tasks); + Future updateTaskOrder(List taskOrder); + + // Delete Future deleteTask(Task task); + + Future deleteTaskOrderEntry(String taskOrderEntry); } diff --git a/lib/model/repositories/local_repository.dart b/lib/model/repositories/local_repository.dart index f921dd3..0815005 100644 --- a/lib/model/repositories/local_repository.dart +++ b/lib/model/repositories/local_repository.dart @@ -20,55 +20,75 @@ class LocalRepository implements TaskRepository { } } + Future _saveTasks(List tasks) async { + final jsonList = tasks.map((e) => jsonEncode(e.toJson())).toList(); + _prefs!.setStringList(_tasksKey, jsonList); + } + + Future _saveTaskOrder(List taskOrder) async { + final jsonList = taskOrder.map((e) => jsonEncode(e)).toList(); + return _prefs!.setStringList(_taskOrderKey, jsonList); + } + // Create @override - Future saveTask(Task task) async { + Future createTask(Task task) async { final tasks = await loadTasks(); - if (tasks.contains(task)) { - tasks.remove(task); - } else { - final taskOrder = (await loadTaskOrder()).toList(); - taskOrder.add(task.id); - await saveTaskOrder(taskOrder); - } tasks.add(task); - return saveTasks(tasks); + return _saveTasks(tasks); } @override - Future saveTasks(List tasks) async { - final jsonList = tasks.map((e) => jsonEncode(e.toJson())).toList(); - return _prefs!.setStringList(_tasksKey, jsonList); - } - - @override - Future saveTaskOrder(Iterable taskOrder) { - final jsonList = taskOrder.map((e) => jsonEncode(e)).toList(); - return _prefs!.setStringList(_taskOrderKey, jsonList); + Future createTaskOrderEntry(String taskOrderEntry) async { + final taskOrder = await loadTaskOrder(); + taskOrder.add(taskOrderEntry); + return _saveTaskOrder(taskOrder); } // Read - @override - Future> loadTaskOrder() async { - final Iterable jsonList = - _prefs!.getStringList(_taskOrderKey) ?? []; - return jsonList.map((e) => jsonDecode(e)); - } - @override Future> loadTasks() async { final Iterable jsonList = _prefs!.getStringList(_tasksKey) ?? []; return jsonList.map((e) => Task.fromJson(jsonDecode(e))).toList(); } + @override + Future> loadTaskOrder() async { + final Iterable jsonList = + _prefs!.getStringList(_taskOrderKey) ?? []; + return jsonList.map((e) => jsonDecode(e)).toList(); + } + + // Update + + @override + Future updateTask(Task task) async { + final tasks = await loadTasks(); + tasks.remove(task); + tasks.add(task); + return _saveTasks(tasks); + } + + @override + Future updateTaskOrder(List taskOrder) async { + return _saveTaskOrder(taskOrder); + } + // Delete @override Future deleteTask(Task task) async { final tasks = await loadTasks(); tasks.remove(task); - saveTasks(tasks); + return _saveTasks(tasks); + } + + @override + Future deleteTaskOrderEntry(String taskOrderEntry) async { + final taskOrder = await loadTaskOrder(); + taskOrder.remove(taskOrderEntry); + return _saveTaskOrder(taskOrder); } } diff --git a/lib/service/task_controller.dart b/lib/service/task_controller.dart index 608b29c..00675ea 100644 --- a/lib/service/task_controller.dart +++ b/lib/service/task_controller.dart @@ -25,16 +25,31 @@ class TaskController extends ChangeNotifier { Future reorderTask(int oldIndex, int newIndex) async { final taskId = _taskOrder.removeAt(oldIndex); _taskOrder.insert(newIndex, taskId); - _repository.saveTaskOrder(_taskOrder); + _repository.updateTaskOrder(_taskOrder); } Future saveTask(Task task) async { - await _repository.saveTask(task); - await _loadTasks(); - await _loadTaskOrder(); + if (_tasks.contains(task)) { + _tasks.remove(task); + _tasks.add(task); + _repository.updateTask(task); + } else { + _tasks.add(task); + _taskOrder.add(task.id); + _repository.createTask(task); + _repository.updateTaskOrder(_taskOrder); + } notifyListeners(); } + Future deleteTask(Task task) async { + _tasks.remove(task); + _taskOrder.remove(task.id); + notifyListeners(); + _repository.deleteTask(task); + _repository.updateTaskOrder(_taskOrder); + } + Future _loadTasks() async { _tasks.clear(); return _repository.loadTasks().then((value) => _tasks.addAll(value));