import 'package:flisp_app/store/todo_dialog_store.dart'; import 'package:flisp_app/widgets/todo_widget.dart'; import 'package:flutter/material.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'; class TodoPage extends StatefulWidget { final VoidCallback? onAddTodoPressed; const TodoPage({super.key, this.onAddTodoPressed}); @override State createState() => TodoPageState(); } class TodoPageState extends State { // 待办事项列表 final List _todos = []; TodoTab _currentTab = TodoTab.all; // 获取过滤后的待办事项 List get _activeTodos { return getActiveTodos(_currentTab, _todos); } // 添加一个公共方法供外部调用 void showAddTodoDialog() { _showAddTodoDialog(); } @override Widget build(BuildContext context) { return buildBody( child: Column( children: [ // 统计信息卡片 buildStatsCard(_todos), // 选项卡 buildTabs( currentTab: _currentTab, onTabChanged: (value) { setState(() { _currentTab = value; }); }, ), // 待办事项列表 Expanded(child: _buildActiveTodoList()), ], ), ); } Widget _buildActiveTodoList() { return _activeTodos.isEmpty ? buildEmptyState(_currentTab) : buildTodoList( todos: _activeTodos, onToggleTodo: (todoId) { setState(() { _toggleTodo(todoId); }); }, onEditTodo: (todo) { _showEditTodoDialog(todo); } ); } // 显示添加待办事项对话框 void _showAddTodoDialog() { final store = Provider.of(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(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(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(); } // 切换待办事项完成状态 void _toggleTodo(String id) { setState(() { final index = _todos.indexWhere((todo) => todo.id == id); if (index != -1) { _todos[index] = _todos[index].copyWith( isCompleted: !_todos[index].isCompleted, ); } }); } }