run method

  1. @override
Future<void> run()

Runs the headless WebView.

Officially Supported Platforms/Implementations:

  • Android WebView
  • iOS WKWebView
  • macOS WKWebView
  • Web <iframe>:
    • It will append a new iframe to the body.
  • Windows WebView2
  • Linux WPE WebKit

Use the PlatformHeadlessInAppWebView.isMethodSupported method to check if this method is supported at runtime.

Implementation

@override
Future<void> run() async {
  if (_started) {
    return;
  }
  _started = true;
  _init();

  final initialSettings = params.initialSettings ?? InAppWebViewSettings();
  _inferInitialSettings(initialSettings);

  Map<String, dynamic> settingsMap =
      (params.initialSettings != null ? initialSettings.toMap() : null) ??
      // ignore: deprecated_member_use_from_same_package
      params.initialOptions?.toMap() ??
      initialSettings.toMap();

  Map<String, dynamic> args = <String, dynamic>{};
  args.putIfAbsent('id', () => id);
  args.putIfAbsent(
    'params',
    () => <String, dynamic>{
      'initialUrlRequest': params.initialUrlRequest?.toMap(),
      'initialFile': params.initialFile,
      'initialData': params.initialData?.toMap(),
      'initialSettings': settingsMap,
      'contextMenu': params.contextMenu?.toMap() ?? {},
      'windowId': params.windowId,
      'initialUserScripts':
          params.initialUserScripts?.map((e) => e.toMap()).toList() ?? [],
      'initialSize': params.initialSize.toMap(),
      'webViewEnvironmentId': params.webViewEnvironment?.id,
    },
  );
  try {
    await _sharedChannel.invokeMethod('run', args);
    _running = true;
  } catch (e) {
    _running = false;
    _started = false;
    rethrow;
  }
}