executeAction method
Future<void>
executeAction(
- NotificationActionEvent event, {
- bool skipReplayCheck = false,
- bool queueOnFailure = true,
Implementation
Future<void> executeAction(
NotificationActionEvent event, {
bool skipReplayCheck = false,
bool queueOnFailure = true,
}) async {
if (!skipReplayCheck &&
!await _replayGuard.claim(
'action:${event.notificationId}:${event.actionId}:'
'${event.message.messageId}',
event.timestamp,
)) {
config.logger.log(
FcmLogLevel.warning,
'Ignored duplicate action "${event.actionId}".',
);
return;
}
try {
var current = event;
for (final interceptor in config.actionInterceptors) {
final intercepted = await interceptor.beforeAction(current);
if (intercepted == null) return;
current = intercepted;
}
await _runMiddleware(current, 0);
for (final interceptor in config.actionInterceptors.reversed) {
await interceptor.afterAction(current);
}
events.action(current);
if (current.replyText != null) events.reply(current);
await _forEachAnalytics((analytics) => analytics.actionExecuted(current));
} on Object catch (error, stackTrace) {
config.logger.log(
FcmLogLevel.error,
'Action "${event.actionId}" failed.',
error: error,
stackTrace: stackTrace,
);
if (queueOnFailure && config.queueFailedActions) {
await _actionQueue.enqueue(event);
}
}
}