markUnread method

Future<EmptyResponse> markUnread(
  1. String messageId
)

Mark message as unread.

You have to provide a messageId from which you want the channel to be marked as unread.

Implementation

Future<EmptyResponse> markUnread(String messageId) async {
  _checkInitialized();

  final response = await _client.markChannelUnread(id!, type, messageId);

  final lastReadDate = state!.currentUserRead?.lastRead;
  final currentUnread = state!.currentUserRead?.unreadMessages ?? 0;

  final messagesFromMarked = state!.messages
      .where((message) => message.user?.id != client.state.currentUser?.id)
      .skipWhile((message) => message.id != messageId)
      .toList();
  final channelUnreadCount = max(currentUnread, messagesFromMarked.length);
  final additionalTotalUnreadCount = currentUnread > 0
      ? messagesFromMarked
          .takeWhile((message) =>
              lastReadDate == null ||
              message.createdAt.isBefore(lastReadDate))
          .length
      : messagesFromMarked.length;

  client.state.totalUnreadCount += additionalTotalUnreadCount;
  state!.unreadCount = channelUnreadCount;

  return response;
}