fromJson static method

MessageModel<MessagePayloadModel> fromJson(
  1. Json json
)

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,
    ),
  };
}