MyDiaryคอร์ส Flutter · 6 สัปดาห์ ทุกสัปดาห์
สัปดาห์ที่ 2 · งานมอบหมาย · การบ้าน
สารบัญหน้านี้

การบ้าน สัปดาห์ที่ 2: MyDiary ที่เพิ่ม/ลบ/แก้ได้จริง

คะแนนเต็ม 20 คะแนน ส่ง:** โปรเจกต์ (zip lib/ + pubspec.yaml) + คลิป ≤ 90 วิ — ตั้งชื่อ รหัสนักศึกษา_HW2


โจทย์

ทำแอปของตัวเอง (ธีมเดียวกับการบ้านสัปดาห์ 1) ให้ เพิ่ม/ลบ/แก้ข้อมูลได้จริง และเก็บถาวรด้วย SQLite

ต่อยอดจากการบ้านสัปดาห์ 1 — เปลี่ยนจากข้อมูล hardcode เป็นข้อมูลที่ผู้ใช้จัดการเองได้

เกณฑ์ให้คะแนน (20 คะแนน)

ก. State และฟอร์ม (7)

ข้อ รายละเอียด คะแนน
ก1 หน้ารายการเป็น StatefulWidget ใช้ setState ถูกต้อง 2
ก2 ฟอร์มเพิ่มข้อมูล มี TextFormField ≥ 2 ช่อง 2
ก3 validator ตรวจสอบ (ห้ามว่าง) แสดงข้อความเตือน 2
ก4 เพิ่มข้อมูลใหม่แล้วแสดงในรายการทันที 1

ข. CRUD ครบ (8)

ข้อ รายละเอียด คะแนน
ข1 Create — เพิ่มได้ 2
ข2 Read — แสดงรายการจาก DB 2
ข3 Update — แก้ไขได้ (แตะแล้วเติมค่าเดิม) 2
ข4 Delete — ลบได้ (มียืนยันก่อนลบ) 2

ค. SQLite เก็บถาวร (5)

ข้อ รายละเอียด คะแนน
ค1 ใช้ sqflite เก็บข้อมูล มี toMap/fromMap 2
ค2 ปิดแอปเปิดใหม่ข้อมูลยังอยู่ (สาธิตในคลิป) 2
ค3 โครงโค้ดเป็นระเบียบ (แยก DatabaseHelper) 1

โบนัส (+2)

  • (+1) แสดงข้อความสวยเมื่อยังไม่มีข้อมูล (empty state)
  • (+1) เพิ่ม field ที่ใช้ Widget เลือกค่า ให้เหมาะกับธีม — เช่น Dropdown หมวดหมู่, คะแนนดาว (Radio/Slider), สถานะดู/ยังไม่ดู (Checkbox/Switch), เลือกวันที่ (DatePicker) — โดยเก็บลง SQLite ครบ (Model + CREATE TABLE + toMap/fromMap)

สรุปคะแนน

หมวด คะแนน
State และฟอร์ม 7
CRUD ครบ 8
SQLite 5
โบนัส +2
รวม 20 (+2)

คำแนะนำ

  • ต่อยอดจากการบ้านสัปดาห์ 1 — ไม่ต้องเขียนใหม่ เพิ่ม State + Form + SQLite เข้าไป
  • ทำ CRUD ทีละตัว — เพิ่มให้ได้ก่อน แล้วค่อยลบ แล้วค่อยแก้ อย่าทำพร้อมกัน
  • ทดสอบ SQLite: เพิ่มข้อมูล → หยุดแอป (ไม่ใช่แค่ปิดหน้า) → รันใหม่ → ต้องยังอยู่
  • ถ้าแก้โครงตาราง (เพิ่ม field) → ถอนแอปออกก่อนรันใหม่ (ไม่งั้น onCreate ไม่รันซ้ำ ตารางเก่าค้าง)
  • เปิด คลังโค้ด Widget พื้นฐาน ประกอบเมื่อลืมไวยากรณ์

เงื่อนไข: แอป build ผ่าน + SQLite ทำงานจริง (ปิดเปิดข้อมูลอยู่) — ถ้าข้อมูลหายตอนปิดแอป หมวด ค เป็น 0 หมายเหตุ: เก็บโปรเจกต์ไว้ต่อ — สัปดาห์หน้าเพิ่มการดึงข้อมูลจากอินเทอร์เน็ต