sendFileMessage method

Future<Message?> sendFileMessage({
  1. required String phone,
  2. required WhatsappFileType fileType,
  3. required List<int> fileBytes,
  4. String? fileName,
  5. String? caption,
  6. String? mimetype,
  7. MessageId? replyMessageId,
  8. String? templateTitle,
  9. String? templateFooter,
  10. bool useTemplate = false,
  11. bool isViewOnce = false,
  12. bool audioAsPtt = false,
  13. List<MessageButtons>? buttons,
})

send file messages using sendFileMessage returns Message object if sent successfully make sure to send fileType , we can also pass optional mimeType replyMessageId will send a quote message to the given messageId add caption to attach a text with the file

Implementation

Future<Message?> sendFileMessage({
  required String phone,
  required WhatsappFileType fileType,
  required List<int> fileBytes,
  String? fileName,
  String? caption,
  String? mimetype,
  MessageId? replyMessageId,
  String? templateTitle,
  String? templateFooter,
  bool useTemplate = false,
  bool isViewOnce = false,
  bool audioAsPtt = false,
  List<MessageButtons>? buttons,
}) async {
  String base64Image = base64Encode(fileBytes);
  String mimeType = mimetype ?? getMimeType(fileType, fileName, fileBytes);
  String fileData = "data:$mimeType;base64,$base64Image";

  String fileTypeName = "image";
  if (mimeType.split("/").length > 1) {
    fileTypeName = mimeType.split("/").first;
  }

  // Check for video file type
  if (fileTypeName == "video") {
    fileTypeName = "video"; // Set the correct file type for videos
  }

  String? replyTextId = replyMessageId?.serialized;
  String? buttonsText = buttons != null
      ? jsonEncode(buttons.map((e) => e.toJson()).toList())
      : null;

  String source =
      '''window.WPP.chat.sendFileMessage(${phone.phoneParse},${fileData.jsParse},{
  type: ${fileTypeName.jsParse},
  isPtt: ${audioAsPtt.jsParse},
  isViewOnce: ${isViewOnce.jsParse},
  filename: ${fileName.jsParse},
  caption: ${caption.jsParse},
  quotedMsg: ${replyTextId.jsParse},
  useTemplateButtons: ${useTemplate.jsParse},
  buttons:$buttonsText,
  title: ${templateTitle.jsParse},
  footer: ${templateFooter.jsParse}
});''';

  var sendResult = await wpClient.evaluateJs(source);
  WhatsappLogger.log("SendResult : $sendResult");
  return Message.parse(sendResult).firstOrNull;
}