앱 만들기 프로젝트/Flutter

Flutter - 6.3 from Json

지나가는물리학부생 2024. 11. 24. 23:03
반응형

이번에는 API로 받은 Json 데이터를 flutter내부에서 사용할 수 있는 형태로 바꿔야 한다.
API의 데이터는 어떻게 되어 있을까?
[{...}, {...}, ... , {...}] 이렇게 되어 있다. List 안에 여러 요소가 있는 형태이다. 그리고 String이다.
(주로 이렇게 되어 있는 것 같다.)

그러면 각 요소를 담는 '그릇'부터 만들어보자.

./models/webtoon_model.dart

class WebtoonModel {
  final String title, thumb, id;
 
  WebtoonModel.fromJson(Map<String, dynamic> json)
      : title = json['title'],
        thumb = json['thumb'],
        id = json['id'];
}

편하게 사용하기 위해 named parameter를 사용하였다.
이에 대한 설명은(나도 까먹어서 다시 읽어보고 왔다)https://want-to-work-life-balance.tistory.com/entry/Dart-31-Named-Parameters

 

Dart - 3.1 Named Parameters

일반적인 함수를 선언하려면...String sayHello(String name, int age, String country) {  return "Hello $name, you are $age, and you come from $country";}이 함수를 불러오려면...void main() {  print(sayHello('me', 12, 'korea'));}이렇게

want-to-work-life-balance.tistory.com

그러면 다음과 같이 하면 된다:
./services/api_service.dart

    if (response.statusCode == 200) {
      final List<dynamic> webtoons = jsonDecode(response.body);
      for (var webtoon in webtoons) {
        webtoonInstances.add(WebtoonModel.fromJson(webtoon));
      }
      return webtoonInstances;
    }

1. jsonDecode를 이용해서 string에서 Json형태로 변경한다.
2. Json안에 있는 각 instance들을 WebtoonModel로 넘겨서 title, thumb, id를 저장한다.
3. 결과 값을 return 한다.

결과 값을 return 하기 위해서는 다음과 같이:

Future<List<WebtoonModel>> getTodaysToons() async {

void에서 이것으로 변경해야 한다.
'데이터를 나중에 받는 것'이기 때문에, Future를 사용해야 하고, List 안에 각 Instance들이 WebtoonModel로 되어 있기에 Future<List<WebtoonModel>>  이렇게 해야 한다.

반응형

'앱 만들기 프로젝트 > Flutter' 카테고리의 다른 글

Flutter - 6.6 FutureBuilder  (0) 2024.11.26
Flutter - 6.5 waitForWebToons  (0) 2024.11.26
Flutter - 6.2 Data Fetching  (0) 2024.11.21
Flutter - 6.1 AppBar  (0) 2024.11.20
Flutter - 5.4 Code Challenge  (0) 2024.11.20