call method
A Callable method for the Integration interface
Implementation
@override
FutureOr<void> call(Hub hub, SentryFlutterOptions options) async {
options.addEventProcessor(
(event, {hint}) async {
try {
final infos = Map<String, dynamic>.from(
await (_channel.invokeMethod('loadContexts')),
);
if (infos['contexts'] != null) {
final contexts = Contexts.fromJson(
Map<String, dynamic>.from(infos['contexts'] as Map),
);
final eventContexts = event.contexts.clone();
contexts.forEach(
(key, dynamic value) {
if (value != null) {
if (key == SentryRuntime.listType) {
contexts.runtimes.forEach(eventContexts.addRuntime);
} else if (eventContexts[key] == null) {
eventContexts[key] = value;
}
}
},
);
event = event.copyWith(contexts: eventContexts);
}
if (infos['integrations'] != null) {
final integrations =
List<String>.from(infos['integrations'] as List);
final sdk = event.sdk ?? options.sdk;
integrations.forEach(sdk.addIntegration);
event = event.copyWith(sdk: sdk);
}
if (infos['package'] != null) {
final package = Map<String, String>.from(infos['package'] as Map);
final sdk = event.sdk ?? options.sdk;
sdk.addPackage(package['sdk_name']!, package['version']!);
event = event.copyWith(sdk: sdk);
}
// on iOS, captureEnvelope does not call the beforeSend callback,
// hence we need to add these tags here.
if (event.sdk?.name == 'sentry.dart.flutter') {
final tags = event.tags ?? {};
tags['event.origin'] = 'flutter';
tags['event.environment'] = 'dart';
event = event.copyWith(tags: tags);
}
} catch (error) {
options.logger(
SentryLevel.error,
'loadContextsIntegration failed : $error',
);
}
return event;
},
);
options.sdk.addIntegration('loadContextsIntegration');
}