import 'package:flisp_app/models/todo.dart'; import 'package:hive_flutter/hive_flutter.dart'; class TodoService { static const String boxName = 'todos'; Box get box => Hive.box(boxName); Future addTodo(Todo todo) async { try { await box.add(todo); return true; } catch (e) { return false; } } List getAllTodos(TodoSortMode mode) { if (mode == TodoSortMode.time) { return box.values.toList() ..sort((a, b) { // 先按是否有 dueDate 分组:有时间的排前面 if (a.dueDate != null && b.dueDate == null) { return -1; // a有时间,b没有时间,a排在前面 } else if (a.dueDate == null && b.dueDate != null) { return 1; // a没有时间,b有时间,b排在前面 } // 都有 dueDate,按 dueDate 排序 else if (a.dueDate != null && b.dueDate != null) { return a.dueDate!.compareTo(b.dueDate!); // 最近的在前面 } // 都没有 dueDate,按 updateTime 排序 else { return b.updateTime.compareTo(a.updateTime); // 最近的在前面 } }); } else { return box.values.toList() ..sort((a, b) => b.priorityIndex.compareTo(a.priorityIndex)); } } List getAllTodosByYear(int year) { return box.values .toList() .where((todo) => todo.createTime.year == year) .toList(); } Future updateTodo(Todo todo) async { try { todo.updateTime = DateTime.now(); await todo.save(); return true; } catch (e) { return false; } } Future deleteTodo(Todo todo) async { try { await todo.delete(); return true; } catch (e) { return false; } } }