json

import 'package:json_annotation/json_annotation.dart';

part '$NAME$.g.dart';

@JsonSerializable(explicitToJson: true)
class $CAP_NAME$ {
  $END$
  
  $CAP_NAME$();
  
  factory $CAP_NAME$.fromJson(Map<String, dynamic> json) => _$$$CAP_NAME$FromJson(json);
  
  Map<String, dynamic> toJson() => _$$$CAP_NAME$ToJson(this);
}

Untitled

fromjson

fromJson, toJson 만 별도로 작성할 때

factory $CAP_NAME$.fromJson(Map<String, dynamic> json) => _$$$CAP_NAME$FromJson(json);
  
Map<String, dynamic> toJson() => _$$$CAP_NAME$ToJson(this);

dataclass (freezed 2.x) 3.x 버전은 일반 클래스와 거의 동일해서 그냥 손으로 칩니다

import 'package:freezed_annotation/freezed_annotation.dart';

part '$NAME$.freezed.dart';

part '$NAME$.g.dart';

@freezed
abstract class $CAP_NAME$ with _$$$CAP_NAME$ {
  const factory $CAP_NAME$({
    $END$
  }) = _$CAP_NAME$;
  
  factory $CAP_NAME$.fromJson(Map<String, Object?> json) => _$$$CAP_NAME$FromJson(json); 
}

Untitled

sealedclass

Dart 3.0 이후 (Freezed)

import 'package:freezed_annotation/freezed_annotation.dart';

part '$NAME$.freezed.dart';

@freezed
sealed class $CAP_NAME$<T> with _$$$CAP_NAME$<T> {
  const factory $CAP_NAME$.success(T data) = Success;
  const factory $CAP_NAME$.error(String e) = Error;
}

Untitled

when

Dart 3 이후의 sealed class 와 함께 사용

switch ($condition$) {
  case Success(:final data):
    $cursor1$
  case Error(:final e):
    $cursor2$
}

scaffold