import 'package:flutter/material.dart'; import './todo_api.dart'; import './todo_model.dart'; import './todo_detail.dart'; // 稍後創建 // import './main.dart'; // 確保可以訪問 MainMenu class TodoManager extends StatefulWidget { // 實際應用中,這裡應該傳入當前用戶 ID final String currentUserId; const TodoManager({this.currentUserId = 'admin', super.key}); @override State createState() { return _TodoManagerState(); } } class _TodoManagerState extends State { late TodoApiService _apiService; late Future> _todosFuture; @override void initState() { super.initState(); _apiService = TodoApiService(currentUserId: widget.currentUserId); // 頁面加載時自動開始獲取資料 _todosFuture = _apiService.fetchTodos(); } // 刷新資料的函數 void _refreshTodos() { setState(() { _todosFuture = _apiService.fetchTodos(); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('我的待辦事項'), actions: [ IconButton( icon: const Icon(Icons.refresh), tooltip: '刷新列表', onPressed: _refreshTodos, ), // 假設這裡使用 Navigator.pop(context) 即可返回 MainMenu IconButton( icon: const Icon(Icons.home), tooltip: '返回主頁', onPressed: () => Navigator.pop(context), ), ], ), body: FutureBuilder>( future: _todosFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('載入失敗: ${snapshot.error}', textAlign: TextAlign.center), const SizedBox(height: 16), ElevatedButton(onPressed: _refreshTodos, child: const Text('重試')), ], ), ); } else if (snapshot.hasData && snapshot.data!.isNotEmpty) { return TodoList(todos: snapshot.data!); } else { return const Center(child: Text('目前沒有待辦事項。工作很輕鬆!')); } }, ), ); } } // ----------------------------------------------------------- // 列表顯示小部件 (TodoList) // ----------------------------------------------------------- class TodoList extends StatelessWidget { final List todos; const TodoList({required this.todos, super.key}); @override Widget build(BuildContext context) { return ListView.builder( itemCount: todos.length, itemBuilder: (BuildContext context, int index) { final item = todos[index]; return Card( elevation: 3, margin: const EdgeInsets.symmetric(vertical: 6.0, horizontal: 16.0), child: InkWell( onTap: () { // 點擊項目:導航到詳細頁面 Navigator.push( context, MaterialPageRoute( builder: (context) => TodoDetail(todo: item), ), ); }, child: ListTile( // 左側狀態指示器 leading: Container( width: 10, decoration: BoxDecoration( color: item.statusColor, borderRadius: BorderRadius.circular(5), ), ), title: Text( item.taskName, style: const TextStyle(fontWeight: FontWeight.bold), ), subtitle: Text( '分類: ${item.className} | 優先級: ${item.priority ?? '一般'}', style: const TextStyle(fontSize: 12), ), trailing: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( '截止日', style: TextStyle(fontSize: 10, color: item.statusColor), ), Text( item.formattedEndDate, style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w600), ), ], ), ), ), ); }, ); } }