run method
Runs the headless WebView.
Officially Supported Platforms/Implementations:
- Android WebView
- iOS WKWebView
- macOS WKWebView
- Web <iframe>:
- It will append a new
iframeto the body.
- It will append a new
- 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;
}
}