freezed 를 사용한 Data 클랫스 생성 및 사용
flutter에서 DTO를 생성해 보도록 한다.
https://pub.dev/packages/freezed
freezed | Dart Package
Code generation for immutable classes that has a simple syntax/API without compromising on the features.
pub.dev
우선 의존성을 추가 해야한다. 의존성은 아래의 retrofit까지 같이 추가되어있다.
dependencies:
retrofit:
dio:
# DTO 클래스 사용을 위해
freezed_annotation:
json_annotation:
dev_dependencies:
retrofit_generator:
build_runner:
json_serializable:
# DTO 사용을 위한
freezed:
보통 DTO 클래스들은 단순한 데이터 저장 및 호출 이외에도 여러 기능들이 필요하다.
toString ,json 변환부터 비교, 인스턴스 생성 등 경우에 따라 상당히 많은 기능들이 필요한 경우가 있다.
spring의 lombok, kotlin의 data class 등이 유사한 사례이다.
아래와 같이 코드를 작성하도록 한다.
import 'package:freezed_annotation/freezed_annotation.dart';
/// date : "2022-01-01"
/// dateName : "1월1일"
/// dateKind : "국경일"
/// isHoliday : true
// 아래의 두 라인을 추가 해 주어야 한다.
// '파일명.g.dart', '파일명.freezed.dart'
part 'holiday.freezed.dart';
part 'holiday.g.dart';
@freezed
class Holiday with _$Holiday {
factory Holiday(
{required String date,
required String dateName,
required String dateKind,
required bool isHoliday}) = _Holiday;
factory Holiday.fromJson(Map<String, dynamic> json) =>
_$HolidayFromJson(json);
}
위의 코드를 작성한 뒤 terminal에 flutter pub run build_runner build 를 입력하면
동일한디렉토리에 part에 입력한 파일들이 자동 생성된다.
Retrofit 을 사용하여 API 호출 받기
Flutter 에서 Retrofit을 사용해 보도록 한다.
https://pub.dev/packages/retrofit
retrofit | Dart Package
retrofit.dart is an dio client generator using source_gen and inspired by Chopper and Retrofit.
pub.dev
android 개발자라면 익숙한 그 이름이다. 역시나 같은 기능을 수행한다.
사용을 위해선 다음과 같은 설정이 필요하다.
공식문서 상에는 dio 의존성이 없지만 예제실행을 위해서는 dio를 별도로 추가 해 주어야 한다.
실사용
레트로핏은 factory 생성자와 build_runner를 사용한 코드 생성방식을 사용한다.
형식에 맞는 코드를 작성한 뒤
terminal에 flutter pub run build_runner build 을 실행시키면 파일 및 코드를 생성하여 추가시켜준다.
import 'package:dio/dio.dart';
import 'package:holiday/model/holiday/holiday.dart';
import 'package:retrofit/http.dart';
// '파일명.g.dart'
part 'rest_client.g.dart';
@RestApi(baseUrl: "url")
abstract class RestClient {
factory RestClient(Dio dio, {String baseUrl}) = _RestClient;
@POST('/path')
Future<List<Holiday>> getHolidayList();
@GET('/path')
Future<List<Holiday>> getHoliday();
}
역시나 part에서 추가한 파일이 자동 생성된다.
flutter/dart에서는 코드 자동생성을 자주 사용하는 듯 하다.
* 주의점
build_runner는 직접 실행을 하는 명령어이며 실행 시점의 정보를 가지고 코드를 생성한다.
따라서 코드를 수정하였다면 build_runner를 반드시 다시 실행해 주어야 한다.
코드를 수정하여도 build_runner를 다시 실행하지 않는다면 이전 버전의 코드가 그대로 실행된다.
https://blog.codefactory.ai/flutter/freezed/
[Flutter] Flutter Freezed 플러그인! Entity Code Generation 은 이거 하나로 끝
서론 Flutter 는 Code Generation 기능이 상당히 많이 활성화되어 있어요. 흔히들 많이 사용하는 json_serializable 라이브러리도 있고 retrofit 및 chopper 라이브러리도 있습니다. 오늘 알려드릴 freezed…
blog.codefactory.ai
'flutter' 카테고리의 다른 글
Flutter Hive 사용하기 (+Freezed) (0) | 2023.01.09 |
---|---|
flutter extention 활용 (0) | 2022.12.20 |
[FLUTTER] HTTP 를 사용한 데이터 받아오기 (0) | 2022.02.19 |
[Flutter] Route를 활용한 화면 전환 (0) | 2021.11.27 |
[Flutter] Scafford?.. (0) | 2021.08.14 |