feat:更新待办事项对话框功能
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
import 'package:flisp_app/store/todo_dialog_store.dart';
|
||||
import 'package:flisp_app/provider/todo_provider.dart';
|
||||
import 'package:flisp_app/widgets/awesome_dialog.dart';
|
||||
import 'package:flisp_app/widgets/todo_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:awesome_dialog/awesome_dialog.dart';
|
||||
import 'package:flisp_app/models/todo.dart';
|
||||
import 'package:flisp_app/utils/todo_utils.dart';
|
||||
import 'package:flisp_app/widgets/common.dart';
|
||||
import 'package:flisp_app/widgets/todo_dialog.dart';
|
||||
import 'package:flisp_app/widgets/todo_form.dart';
|
||||
|
||||
class TodoPage extends StatefulWidget {
|
||||
final VoidCallback? onAddTodoPressed;
|
||||
@@ -30,7 +31,7 @@ class TodoPageState extends State<TodoPage> {
|
||||
|
||||
// 添加一个公共方法供外部调用
|
||||
void showAddTodoDialog() {
|
||||
_showAddTodoDialog();
|
||||
_showTodoDialog(false, null);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -60,99 +61,22 @@ class TodoPageState extends State<TodoPage> {
|
||||
return _activeTodos.isEmpty
|
||||
? buildEmptyState(_currentTab)
|
||||
: buildTodoList(
|
||||
todos: _activeTodos,
|
||||
onToggleTodo: (todoId) {
|
||||
setState(() {
|
||||
_toggleTodo(todoId);
|
||||
});
|
||||
},
|
||||
onEditTodo: (todo) {
|
||||
_showEditTodoDialog(todo);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// 显示添加待办事项对话框
|
||||
void _showAddTodoDialog() {
|
||||
final store = Provider.of<TodoDialogStore>(context, listen: false);
|
||||
store.reset();
|
||||
|
||||
showAwesomeDialog(
|
||||
context: context,
|
||||
body: TodoDialog(isEditing: false),
|
||||
onOk: () {
|
||||
if (store.validate()) {
|
||||
_saveTodo(false, null);
|
||||
}
|
||||
},
|
||||
onCancel: () {
|
||||
store.reset();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// 显示编辑待办事项对话框
|
||||
void _showEditTodoDialog(TodoItem todo) {
|
||||
final store = Provider.of<TodoDialogStore>(context, listen: false);
|
||||
store.initEditData(todo);
|
||||
|
||||
showAwesomeDialog(
|
||||
context: context,
|
||||
body: TodoDialog(isEditing: true, initialTodo: todo),
|
||||
onOk: () {
|
||||
if (store.validate()) {
|
||||
_saveTodo(true, todo);
|
||||
}
|
||||
},
|
||||
onCancel: () {
|
||||
store.reset();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// 保存待办事项
|
||||
void _saveTodo(bool isEditing, TodoItem? todo) {
|
||||
final store = Provider.of<TodoDialogStore>(context, listen: false);
|
||||
|
||||
final newTodo = store.createTodoItem(
|
||||
id: isEditing ? todo!.id : null,
|
||||
isCompleted: isEditing ? todo!.isCompleted : false,
|
||||
createdAt: isEditing ? todo!.createdAt : null,
|
||||
);
|
||||
|
||||
setState(() {
|
||||
if (isEditing) {
|
||||
final index = _todos.indexWhere((t) => t.id == todo!.id);
|
||||
if (index != -1) {
|
||||
_todos[index] = newTodo;
|
||||
}
|
||||
} else {
|
||||
_todos.insert(0, newTodo);
|
||||
}
|
||||
});
|
||||
|
||||
store.reset();
|
||||
_showSuccessDialog(isEditing ? '更新成功' : '添加成功');
|
||||
}
|
||||
|
||||
// 显示成功提示
|
||||
void _showSuccessDialog(String message) {
|
||||
AwesomeDialog(
|
||||
context: context,
|
||||
dialogType: DialogType.success,
|
||||
animType: AnimType.scale,
|
||||
title: message,
|
||||
btnOkText: "好的",
|
||||
btnOkColor: Colors.green,
|
||||
btnOkOnPress: () {},
|
||||
autoHide: Duration(seconds: 2),
|
||||
).show();
|
||||
todos: _activeTodos,
|
||||
onToggleTodo: (todoId) {
|
||||
setState(() {
|
||||
_toggleTodo(todoId);
|
||||
});
|
||||
},
|
||||
onEditTodo: (todo) {
|
||||
_showTodoDialog(true, todo);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// 切换待办事项完成状态
|
||||
void _toggleTodo(String id) {
|
||||
setState(() {
|
||||
final index = _todos.indexWhere((todo) => todo.id == id);
|
||||
final index = _todos.indexWhere((todo) => todo.id.toString() == id);
|
||||
if (index != -1) {
|
||||
_todos[index] = _todos[index].copyWith(
|
||||
isCompleted: !_todos[index].isCompleted,
|
||||
@@ -160,4 +84,50 @@ class TodoPageState extends State<TodoPage> {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 显示对话框
|
||||
void _showTodoDialog(bool isEditing, TodoItem? todo) {
|
||||
final todoProvider = Provider.of<TodoProvider>(context, listen: false);
|
||||
|
||||
if (isEditing) {
|
||||
todoProvider.initForm(todo!);
|
||||
} else {
|
||||
todoProvider.resetForm();
|
||||
}
|
||||
|
||||
final formKey = GlobalKey<FormBuilderState>();
|
||||
|
||||
showAwesomeDialog(
|
||||
context: context,
|
||||
body: TodoForm(formKey: formKey, isEditing: isEditing, initialTodo: todo),
|
||||
onOk: () {
|
||||
if (formKey.currentState!.saveAndValidate()) {
|
||||
Navigator.of(context).pop();
|
||||
_saveTodo(isEditing, todoProvider.formItem);
|
||||
}
|
||||
},
|
||||
onCancel: () {
|
||||
todoProvider.resetForm();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// 保存待办事项
|
||||
void _saveTodo(bool isEditing, TodoItem todo) {
|
||||
final store = Provider.of<TodoProvider>(context, listen: false);
|
||||
|
||||
setState(() {
|
||||
if (isEditing) {
|
||||
final index = _todos.indexWhere((t) => t.id == todo.id);
|
||||
if (index != -1) {
|
||||
_todos[index] = todo;
|
||||
}
|
||||
} else {
|
||||
_todos.insert(0, todo);
|
||||
}
|
||||
});
|
||||
|
||||
store.resetForm();
|
||||
showSuccessDialog(context, isEditing ? '更新成功' : '添加成功');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user