@@ -665,8 +665,7 @@ class UserTopicEvent extends Event {
665
665
}
666
666
667
667
/// A Zulip event of type `message` : https://zulip.com/api/get-events#message
668
- // TODO use [JsonSerializable] here too, using its customization features,
669
- // in order to skip the boilerplate in [fromJson] and [toJson].
668
+ @JsonSerializable (fieldRename: FieldRename .snake)
670
669
class MessageEvent extends Event {
671
670
@override
672
671
@JsonKey (includeToJson: true )
@@ -680,24 +679,23 @@ class MessageEvent extends Event {
680
679
// events and in the get-messages results is that `matchContent` and
681
680
// `matchTopic` are absent here. Already [Message.matchContent] and
682
681
// [Message.matchTopic] are optional, so no action is needed on that.
682
+ @JsonKey (readValue: _readMessageValue, includeToJson: false )
683
683
final Message message;
684
684
685
685
MessageEvent ({required super .id, required this .message});
686
686
687
- factory MessageEvent .fromJson (Map <String , dynamic > json) => MessageEvent (
688
- id: json['id' ] as int ,
689
- message: Message .fromJson ({
690
- ...json['message' ] as Map <String , dynamic >,
691
- 'flags' : (json['flags' ] as List <dynamic >).map ((e) => e as String ).toList (),
692
- }),
693
- );
687
+ static Map <String , dynamic > _readMessageValue (Map <dynamic , dynamic > json, String key) =>
688
+ {...json['message' ] as Map <String , dynamic >, 'flags' : json['flags' ]};
689
+
690
+ factory MessageEvent .fromJson (Map <String , dynamic > json) =>
691
+ _$MessageEventFromJson (json);
694
692
695
693
@override
696
694
Map <String , dynamic > toJson () {
697
695
final messageJson = message.toJson ();
698
696
final flags = messageJson['flags' ];
699
697
messageJson.remove ('flags' );
700
- return {'id' : id, 'type' : type , 'message' : messageJson, 'flags' : flags};
698
+ return {... _$MessageEventToJson ( this ) , 'message' : messageJson, 'flags' : flags};
701
699
}
702
700
}
703
701
0 commit comments