sort method

void sort()
inherited

Implementation

void sort() {
  if (messageList.length <= 1) return;

  // Extract pending messages and remove them from messageList
  final pendingMessages = <BaseMessage>[];
  messageList.removeWhere((message) {
    if (message is BaseMessage &&
        message.sendingStatus == SendingStatus.pending) {
      pendingMessages.add(message);
      return true; // Remove from messageList
    }
    return false; // Keep in messageList
  });

  // Sort non-pending messages (remaining in messageList)
  if (params.reverse) {
    messageList.sort((a, b) => b.createdAt.compareTo(a.createdAt));
  } else {
    messageList.sort((a, b) => a.createdAt.compareTo(b.createdAt));
  }

  // Sort pending messages if any exist
  if (pendingMessages.isNotEmpty) {
    if (params.reverse) {
      pendingMessages.sort((a, b) => a.createdAt.compareTo(b.createdAt));

      for (final pendingMessage in pendingMessages) {
        // Add pending messages at the first
        messageList.insert(0, pendingMessage);
      }
    } else {
      pendingMessages.sort((a, b) => b.createdAt.compareTo(a.createdAt));

      for (final pendingMessage in pendingMessages) {
        // Add pending messages at the end
        messageList.add(pendingMessage);
      }
    }
  }
}