markUnread method
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;
}