init static method

Future<void> init(
  1. FlutterOptionsConfiguration optionsConfiguration, {
  2. AppRunner? appRunner,
  3. @internal MethodChannel channel = _channel,
  4. @internal PlatformChecker? platformChecker,
  5. @internal RendererWrapper? rendererWrapper,
})

Implementation

static Future<void> init(
  FlutterOptionsConfiguration optionsConfiguration, {
  AppRunner? appRunner,
  @internal MethodChannel channel = _channel,
  @internal PlatformChecker? platformChecker,
  @internal RendererWrapper? rendererWrapper,
}) async {
  final flutterOptions = SentryFlutterOptions();

  if (platformChecker != null) {
    flutterOptions.platformChecker = platformChecker;
  }
  if (rendererWrapper != null) {
    flutterOptions.rendererWrapper = rendererWrapper;
  }

  if (flutterOptions.platformChecker.hasNativeIntegration) {
    final binding = createBinding(flutterOptions.platformChecker, channel);
    _native = SentryNative(flutterOptions, binding);
  }

  final platformDispatcher = PlatformDispatcher.instance;
  final wrapper = PlatformDispatcherWrapper(platformDispatcher);

  // Flutter Web don't capture [Future] errors if using [PlatformDispatcher.onError] and not
  // the [runZonedGuarded].
  // likely due to https://github.com/flutter/flutter/issues/100277
  final isOnErrorSupported = flutterOptions.platformChecker.isWeb
      ? false
      : wrapper.isOnErrorSupported(flutterOptions);

  final runZonedGuardedOnError = flutterOptions.platformChecker.isWeb
      ? _createRunZonedGuardedOnError()
      : null;

  // first step is to install the native integration and set default values,
  // so we are able to capture future errors.
  final defaultIntegrations = _createDefaultIntegrations(
    channel,
    flutterOptions,
    isOnErrorSupported,
  );
  for (final defaultIntegration in defaultIntegrations) {
    flutterOptions.addIntegration(defaultIntegration);
  }

  await _initDefaultValues(flutterOptions, channel);

  await Sentry.init(
    (options) => optionsConfiguration(options as SentryFlutterOptions),
    appRunner: appRunner,
    // ignore: invalid_use_of_internal_member
    options: flutterOptions,
    // ignore: invalid_use_of_internal_member
    callAppRunnerInRunZonedGuarded: !isOnErrorSupported,
    // ignore: invalid_use_of_internal_member
    runZonedGuardedOnError: runZonedGuardedOnError,
  );

  if (_native != null) {
    // ignore: invalid_use_of_internal_member
    SentryNativeProfilerFactory.attachTo(Sentry.currentHub, _native!);
  }
}