Flutter에서 JSON 응답을 다루는 방법

이 글에서는 HTTP로 API요청을 하여 받은 응답을 flutter에서 사용하는 방법을 다룹니다.

Flutter에서 JSON 응답을 다루는 방법
factory를 한땀한땀 다루려면..

이 글에서는 HTTP로 API요청을 하여 받은 응답을 flutter에서 사용하는 방법을 다룹니다.

이전 글(플러터(Flutter) 앱 만들기 : 블로그 글 상세)에서 만든 Post객체를 다시 살펴봅니다.

간단한 객체지만 Post 객체의 응답이 복잡해지거나 변경이 잦은 경우 매번 factory 생성자를 손대기가 쉽지 않습니다.

JSON을 시리얼라이즈 하려면 build_runner와 json_serializable, json_annotation 이 필요합니다. pubspec.yaml 에 추가합니다

http는 테스트용 API를 만들기 위한 패키지입니다.

pubspec.yaml

앞으로 사용할 커맨드 목록입니다.

  • flutter pub run build_runner build : 1회 빌드
  • flutter pub run build_runner watch : 파일 변경이 발생하면 빌드
api.dart

api.dart 는 jsonplaceholder에서 글 목록을 가져오고 List<Post> 타입을 가진 리스트에 넣습니다.

post.dart

post.dart 파일 전체입니다. “post.g.dart” 는 build_runner가 만드는 파일입니다. 터미널에서 `flutter pub run build_runner build`을 실행하세요.

맨 위 라인처럼 자동으로 만드는 코드이니 절대 수정하면 안됩니다.

최종 결과
최종 결과

전체 코드는 https://github.com/ChangJoo-Park/flutter_json_serializable 에 있습니다

vscode 사용자를 위한 내용

“.vscode” 디렉터리에 tasks.json을 아래 내용으로 만들어주세요 build / watch가 편해집니다.

이렇게 task를 실행할 수 있습니다.

모델을 쉽게 만드는 snippet 입니다. fltmdl 을 입력하면 기본 클래스 구조가 만들어집니다.{
"Generate class for new model": {
 "prefix": "fltmdl",
 "body": [
  "import 'package:json_annotation/json_annotation.dart';",
  "",
  "/// 아래 코드는 `${1:Item}` 클래스가 생성된 파일의 private 멤버에 접근하는 것을 허용합니다.",
  "/// 파일 이름은 *.g.dart이며, 여기서 *은 소스 파일 이름을 나타냅니다.",
  "part '${2:item}.g.dart';",
  "",
  "/// 클래스가 시리얼라이저가 필요하다고 알려주는 어노테이션입니다.",
  "@JsonSerializable()",
  "class ${1:Item} {",
  "    ${1:Item}(this.userId, this.id, this.title, this.body);",
  "    int userId;",
  "    int id;",
  "    String title;",
  "    String body;",
  "",
  "    /// map 데이터를 가지고 ${1:Item} 인스턴스를 만드는데 필요한 factory 생성자입니다.",
  "    /// '${1:Item}.g.dart'의 `_$${1:Item}FromJson()` 생성자에 구현이 있습니다.",
  "    factory ${1:Item}.fromJson(Map < String, dynamic > json) => _$${1:Item}FromJson(json);",
  "",
  "    /// `toJson` 은 JSON으로 직렬화할 수 있도록 합니다.",
  "    /// 자동으로 만들어진 ${1:Item}.g.dart에 구현이 있습니다.",
  "    Map < String, dynamic > toJson() => _$${1:Item}ToJson(this);",
  "}",
 ],
 "description": ""
}
}

Subscribe to Half-Built Life

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe