82 lines
1.9 KiB
Dart
82 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flisp_app/models/todo.dart';
|
|
|
|
class TodoDialogStore extends ChangeNotifier {
|
|
String _title = '';
|
|
String _description = '';
|
|
DateTime? _dueDate;
|
|
TodoPriority _priority = TodoPriority.medium;
|
|
String? _category;
|
|
|
|
// Getters
|
|
String get title => _title;
|
|
String get description => _description;
|
|
DateTime? get dueDate => _dueDate;
|
|
TodoPriority get priority => _priority;
|
|
String? get category => _category;
|
|
|
|
// Setters
|
|
set title(String value) {
|
|
_title = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
set description(String value) {
|
|
_description = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
set dueDate(DateTime? value) {
|
|
_dueDate = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
set priority(TodoPriority value) {
|
|
_priority = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
set category(String? value) {
|
|
_category = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
// 初始化编辑数据
|
|
void initEditData(TodoItem todo) {
|
|
_title = todo.title;
|
|
_description = todo.description ?? '';
|
|
_dueDate = todo.dueDate;
|
|
_priority = todo.priority;
|
|
_category = todo.category;
|
|
notifyListeners();
|
|
}
|
|
|
|
// 重置表单数据
|
|
void reset() {
|
|
_title = '';
|
|
_description = '';
|
|
_dueDate = null;
|
|
_priority = TodoPriority.medium;
|
|
_category = null;
|
|
notifyListeners();
|
|
}
|
|
|
|
// 验证表单
|
|
bool validate() {
|
|
return _title.trim().isNotEmpty;
|
|
}
|
|
|
|
// 创建待办事项对象
|
|
TodoItem createTodoItem({String? id, bool isCompleted = false, DateTime? createdAt}) {
|
|
return TodoItem(
|
|
id: id ?? DateTime.now().millisecondsSinceEpoch.toString(),
|
|
title: _title.trim(),
|
|
description: _description.trim().isEmpty ? null : _description.trim(),
|
|
dueDate: _dueDate,
|
|
priority: _priority,
|
|
category: _category,
|
|
isCompleted: isCompleted,
|
|
createdAt: createdAt ?? DateTime.now(),
|
|
);
|
|
}
|
|
} |