checkMessages static method
Checks the saved messages and show them if they need to be showed. @param fromStartup If the check has been triggered at app startup.
Implementation
static Future<void> checkMessages({bool fromStartup = false}) async {
List<MBMessage>? messagesSaved = await savedMessages();
if (messagesSaved == null) {
return;
}
if (messagesSaved.isEmpty) {
return;
}
List<MBMessage> messagesToShow = [];
for (MBMessage message in messagesSaved) {
if (message.triggers != null) {
if (message.triggers is MBMessageTriggers) {
MBMessageTriggers messageTriggers = message.triggers;
bool triggerIsValid = await messageTriggers.isValid(fromStartup);
if (message.repeatTimes > 0) {
bool hasAppOpeningTriggers = messageTriggers.triggers
.firstWhereOrNull((t) => t is MBAppOpeningTrigger) !=
null;
if (!(hasAppOpeningTriggers && fromStartup)) {
Map<String, dynamic>? savedTriggers =
await _savedMessageTriggers(message);
if (savedTriggers != null) {
Map<String, dynamic> triggersDictionary =
messageTriggers.toJsonDictionary();
if (mapEquals(savedTriggers, triggersDictionary)) {
continue;
}
}
}
await _saveMessageTriggers(message);
}
if (triggerIsValid) {
messagesToShow.add(message);
}
}
}
}
if (messagesToShow.isNotEmpty) {
List<MBMessage> inAppMessages = messagesToShow
.where((m) =>
m.messageType == MBMessageType.inAppMessage &&
m.inAppMessage != null)
.toList();
List<MBMessage> pushMessages = messagesToShow
.where((m) =>
m.messageType == MBMessageType.push && m.pushMessage != null)
.toList();
if (inAppMessages.isNotEmpty) {
MBMessages? plugin = MBManager.shared.pluginOf<MBMessages>();
if (plugin != null) {
MBInAppMessageManager.presentMessages(
messages: inAppMessages,
ignoreShowedMessages: plugin.debug,
themeForMessage: plugin.themeForMessage,
onButtonPressed: plugin.onButtonPressed,
);
}
}
if (pushMessages.isNotEmpty) {
MBAutomationPushNotificationsManager.showPushNotifications(
pushMessages);
}
}
}