feat:增加hive数据库

This commit is contained in:
2026-04-28 19:59:51 +08:00
parent db52de7b56
commit 3804164cfd
11 changed files with 490 additions and 52 deletions

View File

@@ -3,7 +3,7 @@ class Schedule {
String title;
DateTime startTime;
DateTime endTime;
DateTime? scheduleDate;
DateTime? scheduleTime;
DateTime createTime;
Schedule({
@@ -11,7 +11,7 @@ class Schedule {
required this.title,
required this.startTime,
required this.endTime,
this.scheduleDate,
this.scheduleTime,
DateTime? createTime,
}) : id = id ?? DateTime.timestamp().microsecond,
createTime = DateTime.now();

View File

@@ -1,26 +1,54 @@
class Task {
final int id;
import 'package:hive/hive.dart';
// flutter packages pub run build_runner build
// part 'todo.g.dart';
@HiveType(typeId: 0)
class Task extends HiveObject {
@HiveField(0)
int id;
@HiveField(1)
String title;
@HiveField(2)
String? desc;
@HiveField(3)
DateTime? dueDate;
DateTime? scheduleDate;
@HiveField(4)
DateTime? scheduleTime;
@HiveField(5)
bool isCompleted;
Priority priority;
String? category;
@HiveField(6)
int priorityIndex;
@HiveField(7)
DateTime createTime;
@HiveField(8)
DateTime updateTime;
Priority get priority => Priority.values[priorityIndex];
set priority(Priority value) => priorityIndex = value.index;
Task({
int? id,
required this.title,
this.desc,
this.dueDate,
this.scheduleDate,
this.scheduleTime,
this.isCompleted = false,
this.priority = Priority.medium,
this.category,
Priority priority = Priority.medium,
DateTime? createTime,
}) : id = id ?? DateTime.timestamp().microsecond,
createTime = DateTime.now();
this.priorityIndex = priority.index,
createTime = DateTime.now(),
updateTime = DateTime.now();
}
enum Priority { low, medium, high }
enum Priority { low, medium, high }

View File

@@ -1,7 +1,7 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter/material.dart' show ButtonSegment, SegmentedButton;
import 'package:syncfusion_flutter_calendar/calendar.dart' as calendar;
import 'package:task_hub/models/Schedule.dart';
import 'package:task_hub/models/schedule.dart';
import 'package:task_hub/widgets/schedule_dialog.dart';
class AppointmentDataSource extends calendar.CalendarDataSource {

View File

@@ -91,8 +91,7 @@ class _TaskPageState extends State<TaskPage> {
createTime: task.createTime,
dueDate: task.dueDate,
isCompleted: !task.isCompleted,
priority: task.priority,
category: task.category,
priority: task.priority
);
}
});

View File

@@ -12,29 +12,23 @@ Widget buildFormItem({
children: [
SizedBox(
width: 80,
child: Padding(
padding: const EdgeInsets.only(top: 8),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
if (required)
Padding(
padding: EdgeInsets.only(right: 4),
child: Text(
'*',
style: TextStyle(color: Colors.red, fontSize: 16),
),
),
Text(
label,
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
if (required)
Padding(
padding: EdgeInsets.only(right: 4),
child: Text(
'*',
style: TextStyle(color: Colors.red, fontSize: 16),
),
),
const Text(':', style: TextStyle(fontSize: 14)),
],
),
Text(
label,
style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
),
const Text(':', style: TextStyle(fontSize: 14)),
],
),
),
const SizedBox(width: 12),

View File

@@ -1,6 +1,6 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:omni_datetime_picker/omni_datetime_picker.dart';
import 'package:task_hub/models/Schedule.dart';
import 'package:task_hub/models/schedule.dart';
import 'package:task_hub/widgets/common.dart';
class ScheduleDialog extends StatefulWidget {
@@ -17,7 +17,7 @@ class _ScheduleDialogState extends State<ScheduleDialog> {
late TextEditingController _titleController;
DateTime? _selectedStartTime;
DateTime? _selectedEndTime;
DateTime? _selectedScheduleDate;
DateTime? _selectedScheduleTime;
final _formKey = GlobalKey<FormState>();
@override
@@ -28,7 +28,7 @@ class _ScheduleDialogState extends State<ScheduleDialog> {
);
_selectedStartTime = widget.schedule?.startTime;
_selectedEndTime = widget.schedule?.endTime;
_selectedScheduleDate = widget.schedule?.scheduleDate;
_selectedScheduleTime = widget.schedule?.scheduleTime;
}
@override
@@ -83,7 +83,7 @@ class _ScheduleDialogState extends State<ScheduleDialog> {
title: _titleController.text,
startTime: _selectedStartTime!,
endTime: _selectedEndTime!,
scheduleDate: _selectedScheduleDate,
scheduleTime: _selectedScheduleTime,
);
widget.onSave(schedule);
Navigator.pop(context);
@@ -169,12 +169,12 @@ class _ScheduleDialogState extends State<ScheduleDialog> {
label: '提醒日期',
child: buildOmniDateButton(
context: context,
selectedDate: _selectedScheduleDate,
selectedDate: _selectedScheduleTime,
placeholder: '请选择提醒日期',
type: OmniDateTimePickerType.dateAndTime,
onChanged: (date) {
setState(() {
_selectedScheduleDate = date;
_selectedScheduleTime = date;
});
},
),

View File

@@ -18,7 +18,7 @@ class _TaskDialogState extends State<TaskDialog> {
late TextEditingController _descController;
late Priority _selectedPriority;
DateTime? _selectedDueDate;
DateTime? _selectedScheduleDate;
DateTime? _selectedScheduleTime;
final _formKey = GlobalKey<FormState>();
@override
@@ -28,7 +28,7 @@ class _TaskDialogState extends State<TaskDialog> {
_descController = TextEditingController(text: widget.task?.desc ?? '');
_selectedPriority = widget.task?.priority ?? Priority.medium;
_selectedDueDate = widget.task?.dueDate;
_selectedScheduleDate = widget.task?.scheduleDate;
_selectedScheduleTime = widget.task?.scheduleTime;
}
@override
@@ -45,7 +45,7 @@ class _TaskDialogState extends State<TaskDialog> {
title: _titleController.text,
desc: _descController.text.isEmpty ? null : _descController.text,
dueDate: _selectedDueDate,
scheduleDate: _selectedScheduleDate,
scheduleTime: _selectedScheduleTime,
priority: _selectedPriority,
isCompleted: widget.task?.isCompleted ?? false,
);
@@ -159,12 +159,12 @@ class _TaskDialogState extends State<TaskDialog> {
label: '提醒日期',
child: buildOmniDateButton(
context: context,
selectedDate: _selectedScheduleDate,
selectedDate: _selectedScheduleTime,
placeholder: '请选择提醒日期',
type: OmniDateTimePickerType.dateAndTime,
onChanged: (date) {
setState(() {
_selectedScheduleDate = date;
_selectedScheduleTime = date;
});
},
),

View File

@@ -42,7 +42,7 @@ class TaskItem extends StatelessWidget {
const SizedBox(height: 4),
if (task.desc != null && task.desc!.isNotEmpty) _buildDesc(),
const SizedBox(height: 4),
if (task.dueDate != null || task.scheduleDate != null)
if (task.dueDate != null || task.scheduleTime != null)
_buildDate(),
],
),
@@ -97,11 +97,11 @@ class TaskItem extends StatelessWidget {
),
const SizedBox(width: 4),
],
if (task.scheduleDate != null) ...[
if (task.scheduleTime != null) ...[
Icon(FluentIcons.clock, size: 12, color: Colors.grey),
const SizedBox(width: 4),
Text(
'提醒日期: ${_formatDate(task.scheduleDate!)}',
'提醒日期: ${_formatDate(task.scheduleTime!)}',
style: TextStyle(color: Colors.grey, fontSize: 12),
),
],