screenViewed static method

Future<void> screenViewed(
  1. MBAutomationView view
)

Function called by MBAutomationMessagesManager when a screen is viewed. @param view The view that has been viewed.

Implementation

static Future<void> screenViewed(MBAutomationView view) async {
  if (_timer != null) {
    _timer?.cancel();
  }
  List<MBMessage>? messagesSaved =
      await MBAutomationMessagesManager.savedMessages();
  if (messagesSaved == null) {
    return;
  }
  if (messagesSaved.isEmpty) {
    return;
  }

  bool somethingChanged = false;
  for (MBMessage message in messagesSaved) {
    if (message.triggers is MBMessageTriggers) {
      MBMessageTriggers messageTriggers = message.triggers;
      List<MBViewTrigger> viewTriggers =
          List.castFrom<MBTrigger, MBViewTrigger>(
        messageTriggers.triggers.whereType<MBViewTrigger>().toList(),
      );
      for (MBViewTrigger viewTrigger in viewTriggers) {
        bool result = viewTrigger.screenViewed(view);
        if (result) {
          somethingChanged = true;
          if ((viewTrigger.numberOfTimes ?? 0) >= viewTrigger.times) {
            int index = messageTriggers.triggers.indexOf(viewTrigger);
            if ((viewTrigger.secondsOnView) != 0) {
              _timer = Timer(
                Duration(seconds: viewTrigger.secondsOnView),
                () => _setTriggerCompleted(message.id, index),
              );
            } else {
              _setTriggerCompleted(message.id, index);
            }
          }
        }
      }
    }
  }
  if (somethingChanged) {
    MBAutomationMessagesManager.saveMessages(
      messagesSaved,
      fromFetch: false,
    );
  }
}