create static method
Future<WebViewSession?>
create({
- WebViewSessionMode mode = WebViewSessionMode.incognito,
- void onPermissionRequest(
- WebViewPermissionRequest request
Creates one owned WebView with the requested data policy.
Unsupported modes or creation failures print a diagnostic and return null. No ordinary WebView is created as a fallback for private browsing.
Implementation
static Future<WebViewSession?> create({
WebViewSessionMode mode = WebViewSessionMode.incognito,
void Function(WebViewPermissionRequest request)? onPermissionRequest,
}) async {
final capabilities = await getCapabilities();
if (!capabilities.canClose || !capabilities.supports(mode)) {
final message =
'Owned WebView session mode ${mode.name} is not supported on this platform/runtime.';
debugPrint(
'webview_all: $message ${capabilities.privateSessionRestriction ?? ''} No WebView was created.',
);
return null;
}
if (mode == WebViewSessionMode.incognito &&
capabilities.incognitoSupport == WebViewIncognitoSupport.limited) {
debugPrint(
'webview_all: Limited incognito handling. ${capabilities.privateSessionRestriction ?? "Website data may remain shared and persistent."}',
);
}
WebViewController? controller;
try {
controller = WebViewController.fromPlatformCreationParams(
PlatformWebViewControllerCreationParams(sessionMode: mode),
onPermissionRequest: onPermissionRequest,
);
await controller.platform.prepareSession();
return WebViewSession._(controller, mode, capabilities);
} catch (error) {
try {
await controller?.platform.closeWebViewSession();
} catch (_) {
// Preserve the creation failure.
}
debugPrint(
'webview_all: WebView session creation failed: $error. No session was returned.',
);
return null;
}
}