import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; // flutter packages pub run build_runner build part 'todo.g.dart'; @HiveType(typeId: 0) class Todo extends HiveObject { @HiveField(0) late int id; @HiveField(1) late String title; @HiveField(2) late String content; @HiveField(3) late bool isCompleted; @HiveField(4) late DateTime? dueDate; @HiveField(5) late DateTime? scheduledTime; @HiveField(6) late int priorityIndex; @HiveField(7) late DateTime createTime; @HiveField(8) late DateTime updateTime; TodoPriority get priority => TodoPriority.values[priorityIndex]; set priority(TodoPriority value) => priorityIndex = value.index; Todo({ int? id, required this.title, this.content = '', this.isCompleted = false, this.dueDate, this.scheduledTime, TodoPriority priority = TodoPriority.medium, DateTime? createTime, DateTime? updateTime, }) { // 简单时间戳ID this.id = id ?? DateTime.now().millisecondsSinceEpoch ~/ 1000; this.priorityIndex = priority.index; this.createTime = createTime ?? DateTime.now(); this.updateTime = updateTime ?? DateTime.now(); } Todo copyWith({ String? title, String? content, bool? isCompleted, DateTime? dueDate, DateTime? scheduledTime, TodoPriority? priority, }) { return Todo( id: id, title: title ?? this.title, content: content ?? this.content, isCompleted: isCompleted ?? this.isCompleted, dueDate: dueDate ?? this.dueDate, scheduledTime: scheduledTime ?? this.scheduledTime, priority: priority ?? this.priority, createTime: createTime, updateTime: DateTime.now(), ); } static Todo getEmpty() { return Todo( id: DateTime.now().millisecondsSinceEpoch ~/ 1000, title: '', content: '', isCompleted: false, dueDate: null, scheduledTime: null, priority: TodoPriority.medium, ); } } enum TodoPriority { low('低', Color(0xFF757575), Icons.low_priority), medium('中', Color(0xFFF57C00), Icons.flag), high('高', Color(0xFFD32F2F), Icons.warning); final String label; final Color color; final IconData icon; const TodoPriority(this.label, this.color, this.icon); } enum TodoTab { all('全部'), active('待完成'), completed('已完成'), today('今天'); final String label; const TodoTab(this.label); }