<aside> 💡 플러터는 GSON, Jackson, Moshi, Dartson 같은 런타임 리플렉션을 사용하는 JSON 직렬화 라이브러리들을 트리 셰이킹을 방해한다는 이유로 지원하지 않고 있다.
</aside>
Top Flutter Code Generator, JSON Serialization, Annotation packages | Flutter Gems
json_serializable 라이브러리 사이트(fromJson, toJson 등 json ↔ dto 변환을 담당하는 라이브러리)
json_serializable | Dart package
equatable 라이브러리 사이트 (build_runner 없이 hashCode, ==, toString을 정의할 수 있는 라이브러리, 불변성을 제공하지 않으므로 모든 변수는 final 이여야 함)
freezed 라이브러리 사이트(hashCode, ==, toString, copyWith을 불변성과 함께 제공하는 라이브러리)
dart pub add freezed_annotation json_annotation; dart pub add -d build_runner freezed json_serializable
built_value 라이브러리 사이트(hashCode, ==, toString이 자동으로 구현되는 커스텀 클래스를 불변성과 함께 제공해주는 라이브러리)
Builder 패턴을 사용하여 구현된 것이 특징이다.
abstract class Node implements Built<Node, NodeBuilder> {
@nullable
String get label;
@nullable
Node get left;
@nullable
Node get right;
Node._();
factory Node([updates(NodeBuilder b)]) = _$Node;
}
var node = new Node((b) => b
..left.left.left.right.left.right.label = 'I’m a leaf!'
..left.left.right.right.label = 'I’m also a leaf!');
var updatedNode = node.rebuild((b) => b
..left.left.right.right.label = 'I’m not a leaf any more!'
..left.left.right.right.right.label = 'I’m the leaf now!');