presentMessages static method
void
presentMessages({
- required List<
MBMessage> messages, - bool ignoreShowedMessages = false,
- MBInAppMessageTheme themeForMessage()?,
- dynamic onButtonPressed()?,
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,
);
}