addMessage method
Implementation
MessageGroup addMessage(Message message) {
// _messages.add(message);
// _messages.sort((a, b) {
// if (a.isFailed == b.isFailed) return 0;
// if (a.isFailed) return 1;
// return -1;
// });
late final MessageGroup messageGroup;
if (_messageGroups.isEmpty ||
_messageGroups.last.isSender != message.isSender ||
!isSameMinute(
DateTime.parse(_messageGroups.last.timestamp),
DateTime.parse(message.timestamp),
)) {
messageGroup = MessageGroup(
name: message.name,
isSender: message.isSender,
timestamp: message.timestamp,
messages: [message],
);
_messageGroups.add(messageGroup);
} else {
messageGroup = _messageGroups.last;
messageGroup.messages.add(message);
}
if (_failedMessageEntries.containsKey(message.id)) {
_failedMessageEntries[message.id] = _failedMessageEntries[message.id]!
.copyWith(messageGroup: messageGroup);
}
if (_failedMessageEntries.isNotEmpty) {
final failedIds = List<String>.from(_failedMessageEntries.keys);
for (final failedId in failedIds) {
final entry = _failedMessageEntries[failedId]!;
final failedMessage = entry.messageGroup.messages.firstWhere(
(m) => m.id == failedId,
);
entry.messageGroup.messages.remove(failedMessage);
if (entry.messageGroup.messages.isEmpty) {
_messageGroups.remove(entry.messageGroup);
}
late final MessageGroup newGroup;
if (_messageGroups.isNotEmpty &&
_messageGroups.last.isSender == failedMessage.isSender) {
newGroup = _messageGroups.last;
newGroup.messages.add(failedMessage);
} else {
newGroup = MessageGroup(
name: failedMessage.name,
isSender: failedMessage.isSender,
timestamp: failedMessage.timestamp,
messages: [failedMessage],
);
_messageGroups.add(newGroup);
}
_failedMessageEntries[failedId] = entry.copyWith(
messageGroup: newGroup,
);
}
}
if (message.isRead == false) {
_unreadMessageIds.add(message.id);
} else if (message.isRead == true) {
_unreadMessageIds.remove(message.id);
}
notifyListeners();
return messageGroup;
}