BaseMessage.fromJson constructor
Map json
object
Implementation
factory BaseMessage.fromJson(Map<String, dynamic> json) {
final cmd = json['type'] as String;
BaseMessage msg;
//basemessage backward compatibility -
if (json['custom'] != null) json['data'] = json['custom'];
if (json['ts'] != null) json['created_at'] = json['ts'];
if (json['msg_id'] != null) json['message_id'] = json['msg_id'];
if (CommandString.isUserMessage(cmd) &&
json['scheduled_message_id'] != null) {
msg = ScheduledUserMessage.fromJson(json);
} else if (CommandString.isFileMessage(cmd) &&
json['scheduled_message_id'] != null) {
msg = ScheduledFileMessage.fromJson(json);
} else if (CommandString.isUserMessage(cmd)) {
msg = UserMessage.fromJson(json);
} else if (CommandString.isFileMessage(cmd)) {
msg = FileMessage.fromJson(json);
} else if (CommandString.isAdminMessage(cmd)) {
msg = AdminMessage.fromJson(json);
} else {
throw UnrecognizedMessageTypeError();
}
final metaArray = json['metaarray'];
final metaArrayKeys = List<String>.from(json['metaarray_key_order'] ?? []);
//NOTE: sorted_metaarray is from API, metaarray list is local,
//metaarray map is from Web, so had to handle separately
//local cmd case
if (metaArray is List) {
msg.metaArrays = metaArray
.map((e) => MessageMetaArray.fromJson(e as Map<String, dynamic>))
.toList();
}
//websocket cmd result case
else if (metaArray is Map && metaArrayKeys.isNotEmpty) {
msg.metaArrays = metaArrayKeys.map((e) {
final value = List<String>.from(metaArray[e]);
return MessageMetaArray(key: e, value: value);
}).toList();
}
return msg;
}