fromJson static method
Implementation
static MessageModel fromJson(Json json) {
final hash = json['hash'];
final conversationKey = json['conversation_key'];
final peerKey = json['peer_key'];
final deviceKey = json['device_key'] ?? '';
final sentAt = DateTime.fromMillisecondsSinceEpoch(
(json['timestamp']).toInt(),
);
final attachments = parseList(
json['attachments'],
MessageNetworkMediaModel.fromJson,
);
final decodedPayload = jsonDecode(json['payload']);
final payloadJson = switch (decodedPayload) {
Map<String, dynamic> map => <String, dynamic>{...map},
Map map => map.map((key, value) => MapEntry(key.toString(), value)),
_ => <String, dynamic>{},
};
payloadJson.putIfAbsent(
'type',
() => (json['type'] ?? json['message_type'])?.toString() ?? 'text',
);
final payload = MessagePayloadModel.fromJson(payloadJson);
return switch (payload) {
TextMessagePayloadModel payload => TextMessageModel(
hash: hash,
conversationKey: conversationKey,
peerKey: peerKey,
deviceKey: deviceKey,
sentAt: sentAt,
attachments: attachments,
payload: payload,
),
CanvasMessagePayloadModel payload => CanvasMessageModel(
hash: hash,
conversationKey: conversationKey,
peerKey: peerKey,
deviceKey: deviceKey,
sentAt: sentAt,
attachments: attachments,
payload: payload,
),
final payload => UnknownMessageModel(
hash: hash,
conversationKey: conversationKey,
peerKey: peerKey,
deviceKey: deviceKey,
sentAt: sentAt,
attachments: attachments,
payload: payload,
),
};
}