การบ้าน สัปดาห์ที่ 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 หมายเหตุ: เก็บโปรเจกต์ไว้ต่อ — สัปดาห์หน้าเพิ่มการดึงข้อมูลจากอินเทอร์เน็ต