노마드코더님의 플러터 강의를 수강 하면서 플러터 API요청은 어떤 방식으로 이루어 지는지 알아보려고 한다.
lib 폴더 구조
├─lib
├─models
│ └─webtoon_model.dart
├─screens
│ └─home_screen.dart
└─services
└─api_service.dart
api 요청
// api_service.dart
// pub.dev에서 http를 설치
import 'package:http/http.dart' as http;
class ApiService {
// baseUrl과, 오늘의 웹툰을 받아올 수 있는 주소를 final로 담아준다
final String baseUrl = '<https://webtoon-crawler.nomadcoders.workers.dev>';
final String today = 'today';
// JS와 같이 async, await를 사용해서 데이터가 담기는 것을 기다려주는 처리를 한다.
void getTodaysToons() async {
final url = Uri.parse('$baseUrl/$today');
final response = await http.get(url);
// 성공 코드 일 때 처리
if (response.statusCode == 200) {
// 일단은 디버그 콘솔에 출력만 해본다.
print(response.body);
return;
}
// 에러 처리
throw Error();
}
}
// 출력 값
// [
// {"title":"대학원 탈출일지","thumb":"<https://shared-comic.pstatic.net/thumb/webtoon/790713/thumbnail/thumbnail_IMAG21_3919364435331003700.jpg","id":"790713>"},
// {"title":"역대급 영지 설계사","thumb":"<https://shared-comic.pstatic.net/thumb/webtoon/777767/thumbnail/thumbnail_IMAG21_cc85f891-272b-450a-b642-cffe1568ab71.jpg","id":"777767>"},
// {"title":"1초","thumb":"<https://shared-comic.pstatic.net/thumb/webtoon/725586/thumbnail/thumbnail_IMAG21_17f81846-d1a9-43fd-83a4-f9e966b6b977.jpg","id":"725586>"},
// {"title":"개를 낳았다","thumb":"<https://shared-comic.pstatic.net/thumb/webtoon/712362/thumbnail/thumbnail_IMAG21_7220173143199539507.jpg","id":"712362>"},
// ...
// ]
fromJson → string을 json으로 변경한 후 webtoonInstances로 만들어 줌
// api_service.dart
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:toonflix/models/webtoon_model.dart';
class ApiService {
final String baseUrl = '<https://webtoon-crawler.nomadcoders.workers.dev>';
final String today = 'today';
Future<list> getTodaysToons() async {
List webtoonInstances = [];
final url = Uri.parse('$baseUrl/$today');
final response = await http.get(url);
if (response.statusCode == 200) {
final List webtoons = jsonDecode(response.body);
for (var webtoon in webtoons) {
webtoonInstances.add(WebtoonModel.fromJson(webtoon));
}
return webtoonInstances;
}
throw Error();
}
}
</list
String으로 들어온 json string을 json 자료형으로 변환시키는 과정.
클래스의 named constructor를 사용하여 변환 된 스트링 값을 Map 자료형을 사용하여 key, value 자료형으로 만들어준다.
- JSON으로 된 데이터를 Dart Class로 바꾼다.
- 바꾼 인스턴스들을 새로운 리스트 객체 안에 넣어서 반환
'Flutter' 카테고리의 다른 글
[Flutter, Dart] Getter, Setter 정의와 사용법 (0) | 2022.12.28 |
---|---|
[Flutter] TextField 위젯의 textAlignVertical 속성 (TextField 정렬) (0) | 2022.12.28 |
[Flutter] 하단바, 페이지 하단에 떠 있는 버튼 위젯(FloatingActionButton) (0) | 2022.12.27 |
[Flutter] Calendar 구현(table_calendar 오픈소스 활용) (0) | 2022.12.26 |
[Flutter] 비동기 프로그래밍 (Future, Stream, async, async*, yeild, yeild*) (0) | 2022.12.22 |