init static method

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

Implementation

static Future<void> init(
  FlutterOptionsConfiguration optionsConfiguration, {
  AppRunner? appRunner,
  @internal PackageLoader packageLoader = _loadPackageInfo,
  @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;
  }

  final nativeChannel = SentryNativeChannel(channel, flutterOptions);
  if (flutterOptions.platformChecker.hasNativeIntegration) {
    final native = SentryNative();
    native.nativeChannel = nativeChannel;
  }

  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);

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

  await _initDefaultValues(flutterOptions, channel);

  await Sentry.init(
    (options) async {
      await optionsConfiguration(options as SentryFlutterOptions);
    },
    appRunner: appRunner,
    // ignore: invalid_use_of_internal_member
    options: flutterOptions,
    // ignore: invalid_use_of_internal_member
    callAppRunnerInRunZonedGuarded: !isOnErrorSupported,
  );
}