LoginSignup
0
0

More than 3 years have passed since last update.

Built_Valueのすすめ (シリアライズ)

Last updated at Posted at 2020-12-19

この記事はこちらの和訳です。Flutterを触り始めて理解があやしかったBuild_Valueライブラリについて、自分の勉強用にまとめます。

イントロ

前の記事でも書いたが、DartはJSONシリアライズのサポートが不十分であり、自前で実装するために毎回長いコードを書かなくてはいけない。そこでBuilt Valueの出番となる。

Serializerのセットアップ

2つのステップでセットアップする。
1. モデルの定義にstatic Serializerを追加
2. トップレベルのSerializerを定義する

1. モデルの定義にstatic Serializerを追加

前の記事のContactモデルを使ってシリアライズの設定をする。
static Serializerを追加するとこのようになる。

import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';

part 'contact.g.dart';

abstract class Contact implements Built<Contact, ContactBuilder> {
  Contact._();
  factory Contact([updates(ContactBuilder b)]) = _$Contact;

  static Serializer<Contact> get serializer => _$contactSerializer;

  int get id;

  String get fullName;

  @nullable
  int get age;

  @nullable
  String get mobile;

  @nullable
  bool get isFriend;
}

ここで下記のコマンドで再度contact.g.dartを生成する

flutter packages pub run build_runner build

するとserializerが追加されているのがわかる。

part of 'contact.dart';

Serializer<Contact> _$contactSerializer = new _$ContactSerializer();

class _$ContactSerializer implements StructuredSerializer<Contact> {...}

class _$Contact extends Contact {...}

class ContactBuilder implements Builder<Contact, ContactBuilder> {...}

2. トップレベルのSerializerを定義する

次にserializers.dartファイルを追加する。


// serializers.dart

import 'package:built_value/serializer.dart';

import 'contact.dart';

part 'serializers.g.dart';

// モデルはここのリストに追加する
@SerializersFor([
  Contact,
])
final Serializers serializers = _$serializers;

ここで下記のコマンドでserializers.g.dartを生成する

flutter packages pub run build_runner build

使ってみる

Contact contact3 = Contact((b) => b
    ..id = 1
    ..fullName = 'Stack Secrets');
[Contact, id, 1, fullName, Stack Secrets]

serializers.dartを下記のように変更。

import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';

import 'contact.dart';

part 'serializers.g.dart';

@SerializersFor([
  Contact,
])

final Serializers serializers =
    (_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

Contact contact3 = Contact((b) => b
    ..id = 1
    ..fullName = 'Stack Secrets');

するとJSONフォーマットで出力できた。

{$: Contact, id: 1, fullName: Stack Secrets}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0