feat:增加hive数据库
This commit is contained in:
@@ -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();
|
||||
@@ -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 }
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
},
|
||||
),
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
},
|
||||
),
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user