setReaction method

void setReaction({
  1. required String emoji,
  2. required String messageId,
  3. required String userId,
})

Function for setting reaction on specific chat bubble

Implementation

void setReaction({
  required String emoji,
  required String messageId,
  required String userId,
}) {
  final message = initialMessageList.firstWhereOrNull(
    (message) => message.id == messageId,
  );
  if (message == null) throw Exception('Message Not Found!');
  final reactedUserIds = message.reaction.reactedUserIds;
  final indexOfMessage = initialMessageList.indexOf(message);
  final userIndex = reactedUserIds.indexOf(userId);
  if (userIndex != -1) {
    if (message.reaction.reactions[userIndex] == emoji) {
      message.reaction
        ..reactions.removeAt(userIndex)
        ..reactedUserIds.removeAt(userIndex);
    } else {
      message.reaction.reactions[userIndex] = emoji;
    }
  } else {
    message.reaction
      ..reactions.add(emoji)
      ..reactedUserIds.add(userId);
  }
  initialMessageList[indexOfMessage] = Message(
    id: messageId,
    message: message.message,
    createdAt: message.createdAt,
    sentBy: message.sentBy,
    replyMessage: message.replyMessage,
    reaction: message.reaction,
    messageType: message.messageType,
    status: message.status,
  );
  if (messageStreamController.isClosed) return;
  messageStreamController.sink.add(initialMessageList);
}