channelListMessageSummary function

String channelListMessageSummary(
  1. Message? message, {
  2. NexconnChatUILocalizations? localizations,
  3. ChannelType? channelType,
  4. String? currentUserId,
})

Implementation

String channelListMessageSummary(
  Message? message, {
  NexconnChatUILocalizations? localizations,
  ChannelType? channelType,
  String? currentUserId,
}) {
  final l10n = localizations ?? NexconnChatUILocalizationsEn();
  if (message == null) {
    if (channelType == ChannelType.system) {
      return '';
    }
    return l10n.chatMessageListEmpty;
  }

  String summary;
  if (message is GIFMessage) {
    summary = l10n.messageSummaryImage;
  } else if (message is CombineMessage) {
    summary = '[${l10n.combineMessageChatHistoryLabel}]';
  } else {
    summary = messageSummary(message, localizations: l10n);
  }
  summary = summary
      .replaceAll(RegExp(r'[\r\n]+'), ' ')
      .replaceAll(RegExp(r'\s{2,}'), ' ')
      .trim();

  final isGroupChannel = channelType == ChannelType.group;
  final isReceivedMessage =
      _messageDirectionOf(message) != MessageDirection.send;
  final senderId = _senderUserIdOf(message)?.trim();
  final isCurrentUser =
      currentUserId != null &&
      currentUserId.isNotEmpty &&
      senderId != null &&
      senderId.isNotEmpty &&
      senderId == currentUserId;
  if (!isGroupChannel || !isReceivedMessage || isCurrentUser) {
    return summary;
  }

  final senderName =
      _messageUserInfoOf(message)?.alias?.trim() ??
      _messageUserInfoOf(message)?.name?.trim() ??
      senderId;
  if (senderName == null || senderName.isEmpty) {
    return summary;
  }

  final separator = l10n.localeName.startsWith('zh') ? ':' : ': ';
  return '$senderName$separator$summary';
}