getMessageReceipts static method

Future<List<MessageReceipt>?> getMessageReceipts(
  1. int messageId, {
  2. required dynamic onSuccess(
    1. List<MessageReceipt> messageReceipt
    )?,
  3. required dynamic onError(
    1. CometChatException excep
    )?,
})

Method to get message receipts.

method could throw PlatformException with error codes specifying the cause Get message receipts (delivery/read receipts).

Migration Note: Migrated from platform channels to native Dart implementation. Behavior and signature remain identical for backward compatibility.

Android Reference: MessagesRequest.getMessageReceipts(int messageId)

Implementation

static Future<List<MessageReceipt>?> getMessageReceipts(int messageId,
    {required Function(List<MessageReceipt> messageReceipt)? onSuccess,
    required Function(CometChatException excep)? onError}) async {
  try {
    // Get SDK instance
    final sdk = SdkRegistry.getInstance();

    // Call native Dart message repository
    // Returns map with receipts list and message context
    final result =
        await sdk.messages.getMessageReceipts(messageId.toString());

    // Extract message context for receipt parsing
    // Android Reference: receiptsFromJSON takes receiverId, receiverType, messageId from parent
    final receiptsData = result['receipts'] as List<Map<String, dynamic>>;
    final parsedMessageId = result['messageId'] as int;
    final receiverId = result['receiverId'] as String;
    final receiverType = result['receiverType'] as String;

    // Convert to MessageReceipt objects using DTO and mapper
    // Android Reference: MessageReceipt.receiptsFromJSON()
    List<MessageReceipt> receiptList = [];
    for (var receiptData in receiptsData) {
      try {
        final dto = MessageReceiptDto.fromJson(receiptData);
        receiptList.add(MessageReceiptMapper.fromApiResponse(
          dto,
          messageId: parsedMessageId,
          receiverId: receiverId,
          receiverType: receiverType,
        ));
      } catch (e) {
        _errorCallbackHandler(null, null, e, onError);
        return [];
      }
    }

    // Call success callback
    if (onSuccess != null) onSuccess(receiptList);
    return receiptList;
  } on SdkException catch (sdkEx) {
    // Convert SdkException to CometChatException
    final cometChatEx = CometChatException(
      sdkEx.code,
      sdkEx.details ?? sdkEx.message,
      sdkEx.message,
    );
    _errorCallbackHandler(cometChatEx, null, null, onError);
  } catch (e) {
    _errorCallbackHandler(null, null, e, onError);
  }
  return null;
}