Benjamin
Benjamin

Reputation: 6161

How to convert Object to Map with built_value for Firestore?

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

Answers (1)

ravish.hacker
ravish.hacker

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

Related Questions