pet_service.dart

import 'dart:convert';
import 'package:flutter/services.dart';
import '../models/pet_model.dart';

class PetService {
  /// โหลดข้อมูลสัตว์เลี้ยงจากไฟล์ JSON ใน assets
  static Future<Map<String, List<Pet>>> loadPetsData() async {
    final String jsonString = await rootBundle.loadString('assets/data/pets_data.json');
    final Map<String, dynamic> data = jsonDecode(jsonString);
    
    return {
      'dogs': (data['สุนัข'] as List)
          .map((e) => Pet.fromJson(Map<String, dynamic>.from(e), animalType: 'สุนัข'))
          .toList(),
      'cats': (data['แมว'] as List)
          .map((e) => Pet.fromJson(Map<String, dynamic>.from(e), animalType: 'แมว'))
          .toList(),
    };
  }

  /// คืนค่า list ของสายพันธุ์ทั้งหมด
  static Future<List<Pet>> getAllBreeds() async {
    final petsData = await loadPetsData();
    return [...petsData['dogs']!, ...petsData['cats']!];
  }

  /// หา Pet จากชื่อสายพันธุ์
  static Future<Pet?> getBreedByName(String name) async {
    final allBreeds = await getAllBreeds();
    try {
      return allBreeds.firstWhere((breed) => breed.name == name);
    } catch (e) {
      return null; // ถ้าไม่เจอชื่อ
    }
  }
}

1. โครงสร้างคลาส

  • คลาส PetService ทำหน้าที่ โหลดข้อมูลสัตว์เลี้ยงจากไฟล์ JSON และให้บริการข้อมูลเหล่านี้แก่แอป


2. โหลดข้อมูลจากไฟล์ JSON

  • rootBundle.loadString() → โหลดไฟล์ JSON จาก assets

  • jsonDecode() → แปลง string เป็น Map

  • แยกเป็นสองประเภท: dogs และ cats

  • ใช้ Pet.fromJson() แปลงแต่ละ element เป็น object Pet

  • คืนค่า Map<String,List<Pet>>

ตัวอย่าง output


3. คืนค่า list ของสายพันธุ์ทั้งหมด

  • รวม list ของ dogs และ cats เป็น list เดียว

  • ... → spread operator ใช้รวม List

ตัวอย่าง output


4. หา Pet จากชื่อสายพันธุ์

  • ใช้ firstWhere หา object Pet ที่ name ตรงกับที่ส่งเข้ามา

  • ถ้าไม่เจอ → คืนค่า null

ตัวอย่าง


สรุปง่าย ๆ

  1. loadPetsData() → โหลดข้อมูลจาก JSON → แปลงเป็น object Pet

  2. getAllBreeds() → คืน list ของสัตว์ทั้งหมด (หมา+แมว)

  3. getBreedByName(name) → หา Pet object จากชื่อสายพันธุ์

  • คลาสนี้ช่วย แยกการจัดการข้อมูลสัตว์ออกจาก UI ทำให้โค้ดสะอาดและจัดการง่าย

Last updated