基本上定义你的模型如下:
import 'package:built_value/built_value.dart';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/serializer.dart';
import 'serializers.dart';
part 'player.g.dart';
abstract class PlayerModel implements Built<PlayerModel, PlayerModelBuilder> {
@nullable
String get uid;
String get displayName;
PlayerModel._();
factory PlayerModel([void Function(PlayerModelBuilder) updates]) =
_$PlayerModel;
Map<String, dynamic> toJson() {
return serializers.serializeWith(PlayerModel.serializer, this);
}
static PlayerModel fromJson(Map<String, dynamic> json) {
return serializers.deserializeWith(PlayerModel.serializer, json);
}
static Serializer<PlayerModel> get serializer => _$playerModelSerializer;
}
注意上面的 toJson 和 fromJson 方法。serializers.dart
然后我在文件中定义了一个全局序列化器。
import 'package:built_collection/built_collection.dart';
import 'package:built_value/serializer.dart';
import 'player.dart';
part 'serializers.g.dart';
@SerializersFor([PlayerModel])
final Serializers serializers =
(_$serializers.toBuilder()..addPlugin(new StandardJsonPlugin())).build();
上面的 StandardJsonPlugin 就是生成我们普遍知道的 Json。否则,built_value 将对象序列化为它自己的表示形式。
build_runner
确保在进行更改后通过运行重新生成文件。