checkMessages static method

Future<void> checkMessages({
  1. bool fromStartup = false,
})

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);
    }
  }
}