Reputation: 6161
I'm new to using built_value's serializers and I use Firestore as a backend. I want to serialize my model, and then convert that given Object to a Map so I can put it into Firestore.
I have this line here:
final serializedList = serializers.serialize(shoppingList, specifiedType: const FullType(ShoppingList)); //Object
The setData
method only accepts a Map for the data so that's why I need to convert it into a map.
Upvotes: 1
Views: 1321
Reputation: 1183
Basically define your model like below:
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;
}
Note the toJson and fromJson methods above.
Then I define a global serizlier in serializers.dart
file.
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 above is to generate Json as we know it generally. Otherwise built_value serializes objects into its own representation.
Make sure you regenerate files by running build_runner
after making changes.
Upvotes: 2