iT邦幫忙

0

DAY 9 : To_Do List App 優化與進階功能

  • 分享至 

  • xImage
  •  
  1. 優化新增任務輸入欄位
    • 提示文字:「輸入新任務」
    • 可以按加號新增任務,也可以按 Enter 鍵新增
TextField(
 controller: _textController,
 decoration: const InputDecoration(
   hintText: '輸入新任務', // 這裡設定提示文字
 ),
 onSubmitted: (value) { // 新增按 Enter 也能新增任務
   if (value.isNotEmpty) _addTask(value);
 },
)
  1. 任務刪除功能
    • 每個任務旁邊增加紅色垃圾桶圖示
    • 點擊垃圾桶即可刪除該任務
IconButton(
 icon: const Icon(Icons.delete, color: Colors.red), // 垃圾桶圖示改成紅色
 onPressed: () => _removeTask(index), // 刪除該任務的方法
)
  1. 任務完成狀態切換
    • 點擊任務文字即可標記完成或取消完成
    • 已完成任務文字加上刪除線
ListTile(
 title: Text(
   todo['task'],
   style: TextStyle(
     decoration: todo['done']
         ? TextDecoration.lineThrough
         : TextDecoration.none,
   ),
 ),
 onTap: () => _toggleDone(index), // 點擊切換完成狀態
)
  1. 任務列表 UI 調整
    • 使用 ListView.builder 顯示任務列表
    • 調整 ListTile 之間的間距
Expanded(
 child: ListView.builder(
   itemCount: _todoList.length,
   itemBuilder: (context, index) {
     final todo = _todoList[index];
     return Padding(
       padding: const EdgeInsets.symmetric(vertical: 4.0), // 每個任務之間間距
       child: ListTile(
         title: Text(
           todo['task'],
           style: TextStyle(
             decoration: todo['done']
                 ? TextDecoration.lineThrough
                 : TextDecoration.none,
           ),
         ),
         trailing: IconButton(
           icon: const Icon(Icons.delete, color: Colors.red),
           onPressed: () => _removeTask(index),
         ),
         onTap: () => _toggleDone(index),
       ),
     );
   },
 ),
)
  1. 程式結構整理
    • 將新增、刪除、切換完成狀態功能封裝成方法
    • 使用 setState() 確保畫面即時更新
void _addTask(String task) {
 setState(() {
   _todoList.add({'task': task, 'done': false});
 });
 _textController.clear();
}

void _toggleDone(int index) {
 setState(() {
   _todoList[index]['done'] = !_todoList[index]['done'];
 });
}

void _removeTask(int index) {
 setState(() {
   _todoList.removeAt(index);
 });
}

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言