getUndeliveredMembers method

List<Member>? getUndeliveredMembers(
  1. BaseMessage message
)

Returns the list of members that haven't received the given message. This excludes the current logged-in User and the Sender of the message. It will always be zero if the passed on message is an AdminMessage, or if this channel is a super group channel. If there is no delivery status, returns null. (Delivery receipt is a premium feature.)

Implementation

List<Member>? getUndeliveredMembers(BaseMessage message) {
  // sbLog.i(StackTrace.current, 'messageId: ${message.messageId}');

  if (message is AdminMessage) return [];
  if (isSuper) return [];

  final deliveryStatus =
      chat.channelCache.find<DeliveryStatus>(channelKey: channelUrl);

  if (deliveryStatus == null) return null;

  return members.where((member) {
    if (member.isCurrentUser) return false;
    if (message.sender?.userId == member.userId) return false;
    if (member.memberState != MemberState.joined) return false;

    final deliveredAt =
        deliveryStatus.updatedDeliveryStatus[member.userId] ?? 0;
    return deliveredAt < message.createdAt;
  }).toList();
}