run method

Future<void> run()

Runs the headless WebView.

NOTE for Web: it will append a new iframe to the body.

Officially Supported Platforms/Implementations:

  • Android native WebView
  • iOS
  • Web
  • MacOS

Implementation

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) ??
          params.initialOptions?.toMap() ??
          initialSettings.toMap();

  Map<String, dynamic> pullToRefreshSettings =
      _androidParams.pullToRefreshController?.params.settings.toMap() ??
          _androidParams.pullToRefreshController?.params.options.toMap() ??
          PullToRefreshSettings(enabled: false).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() ??
                    [],
            'pullToRefreshSettings': pullToRefreshSettings,
            'initialSize': params.initialSize.toMap()
          });
  await _sharedChannel.invokeMethod('run', args);
  _running = true;
}