การบ้าน สัปดาห์ที่ 3: MyDiary ที่เชื่อมอินเทอร์เน็ต
ส่ง: โปรเจกต์ (zip lib/ + pubspec.yaml + AndroidManifest.xml) + คลิป ≤ 90 วิ — ตั้งชื่อ รหัสนักศึกษา_HW3
โจทย์
เพิ่มการดึงข้อมูลจากอินเทอร์เน็ตให้แอปของตัวเอง (ธีมเดียวกับสัปดาห์ก่อน) — เลือก API ที่เข้ากับธีมแอป มาแสดง พร้อมจัดการสถานะโหลด/error ครบ (ถ้าไม่มีสามารถใช้อะไรก็ได้)
ตัวอย่าง API ฟรี (ไม่ต้อง key) เลือกให้เข้าธีม:
- คำคม: https://api.quotable.io/random
- เกร็ดตัวเลข: http://numbersapi.com/random/trivia
- สภาพอากาศ: https://api.open-meteo.com/v1/forecast?latitude=13.75&longitude=100.5¤t=temperature_2m
- เวลาประเทศต่างๆ: https://worldtimeapi.org/api/timezone/Asia/Bangkok
เลือก API ที่มีความหมายกับแอป เช่น แอปท่องเที่ยว→สภาพอากาศ / แอปไดอารี→คำคม
เกณฑ์ให้คะแนน (15 คะแนน)
ก. การดึงข้อมูล (7)
| ข้อ | รายละเอียด | คะแนน |
|---|---|---|
| ก1 | ติดตั้ง http + เพิ่ม INTERNET permission ใน manifest | 1 |
| ก2 | สร้าง ApiService แยกไฟล์ มีเมธอด async ดึง API | 2 |
| ก3 | แปลง JSON เป็น Model ถูกต้อง (fromJson) หรือรับข้อความล้วนได้ | 2 |
| ก4 | ข้อมูลจากเน็ตแสดงบนหน้าจอจริง | 2 |
ข. จัดการสถานะ (5)
| ข้อ | รายละเอียด | คะแนน |
|---|---|---|
| ข1 | FutureBuilder แสดงสถานะโหลด (CircularProgressIndicator) | 2 |
| ข2 | จัดการ error — ปิดเน็ตแล้วไม่ crash (แสดงข้อความสุภาพ) สาธิตในคลิป | 3 |
ค. คุณภาพและความสมบูรณ์ (3)
| ข้อ | รายละเอียด | คะแนน |
|---|---|---|
| ค1 | มี try-catch หรือ timeout กันแอปค้าง | 1 |
| ค2 | ปุ่มรีเฟรช/โหลดใหม่ ทำงานได้ | 1 |
| ค3 | โครงเดิม (SQLite/รายการ) ยังทำงานปกติ ไม่พัง | 1 |
โบนัส (+2)
- (+1) ผสาน API เข้ากับ SQLite (เช่น บันทึกข้อมูลจากเน็ตลง DB ได้)
- (+1) ดึง API 2 ตัว หรือแสดงข้อมูลจากเน็ตในหลายหน้า
สรุปคะแนน
| หมวด | คะแนน |
|---|---|
| การดึงข้อมูล | 7 |
| จัดการสถานะ | 5 |
| คุณภาพ | 3 |
| โบนัส | +2 |
| รวม | 15 (+2) |
เงื่อนไข:
แอป build ผ่าน + จัดการ error ได้ (ปิดเน็ตไม่ crash) — ถ้า crash ตอนเน็ตหลุด หมวด ข เป็น 0
หมายเหตุ: เก็บโปรเจกต์ไว้ต่อ — สัปดาห์หน้า