screenViewed static method
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,
);
}
}