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

การบ้าน สัปดาห์ที่ 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&current=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
หมายเหตุ: เก็บโปรเจกต์ไว้ต่อ — สัปดาห์หน้า