presentMessages static method

void presentMessages({
  1. required List<MBMessage> messages,
  2. bool ignoreShowedMessages = false,
  3. MBInAppMessageTheme themeForMessage(
    1. BuildContext,
    2. MBInAppMessage
    )?,
  4. dynamic onButtonPressed(
    1. MBInAppMessageButton
    )?,
})

Present an array of in-app messages, if they're not been already presented @param messages The messages that needs to be presented @param ignoreShowedMessages if this is true a message will be displayed even if it has already been displayed @param themeForMessage A function that provides the theme of an in-app message. @param onButtonPressed Function called when a button is pressed.

Implementation

static void presentMessages({
  required List<MBMessage> messages,
  bool ignoreShowedMessages = false,
  MBInAppMessageTheme Function(BuildContext, MBInAppMessage)? themeForMessage,
  Function(MBInAppMessageButton)? onButtonPressed,
}) async {
  if (_showingMessages != null) {
    List<int> showingMessagesIds = [];
    if (_showingMessages != null) {
      showingMessagesIds = _showingMessages!.map((m) => m.id).toList();
    }
    List<MBMessage> messagesWithoutShowedMessages = messages;
    messagesWithoutShowedMessages
        .removeWhere((m) => showingMessagesIds.contains(m.id));
    await Future.delayed(const Duration(seconds: 1));
    presentMessages(
      messages: messagesWithoutShowedMessages,
      ignoreShowedMessages: ignoreShowedMessages,
      themeForMessage: themeForMessage,
      onButtonPressed: onButtonPressed,
    );
    return;
  }

  List<MBMessage> messagesToShow = messages
      .where((message) => message.messageType == MBMessageType.inAppMessage)
      .toList();
  if (!ignoreShowedMessages) {
    List<MBMessage> messages = [];
    for (MBMessage message in messagesToShow) {
      bool needsToShowMessage = await _needsToShowMessage(message);
      if (needsToShowMessage) {
        messages.add(message);
      }
    }
    messagesToShow = messages;
  }

  if (messagesToShow.isEmpty) {
    return;
  }

  messagesToShow.sort(
    (m1, m2) => -m1.createdAt.compareTo(m2.createdAt),
  );

  _showingMessages = messagesToShow;
  _presentMessage(
    index: 0,
    messages: messagesToShow,
    themeForMessage: themeForMessage,
    onButtonPressed: onButtonPressed,
  );
}