Files
flisp_app/lib/models/todo.dart
2025-11-08 22:06:16 +08:00

106 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
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 int priorityIndex;
@HiveField(6)
late DateTime createTime;
@HiveField(7)
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,
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,
TodoPriority? priority,
}) {
return Todo(
id: id,
title: title ?? this.title,
content: content ?? this.content,
isCompleted: isCompleted ?? this.isCompleted,
dueDate: dueDate ?? this.dueDate,
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,
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);
}