WebKitWebViewController constructor
WebKitWebViewController(
- PlatformWebViewControllerCreationParams params
Constructs a WebKitWebViewController.
Implementation
WebKitWebViewController(PlatformWebViewControllerCreationParams params)
: super.implementation(params is WebKitWebViewControllerCreationParams
? params
: WebKitWebViewControllerCreationParams
.fromPlatformWebViewControllerCreationParams(params)) {
_webView.addObserver(
_webView,
keyPath: 'estimatedProgress',
options: <NSKeyValueObservingOptions>{
NSKeyValueObservingOptions.newValue,
},
);
_webView.addObserver(
_webView,
keyPath: 'URL',
options: <NSKeyValueObservingOptions>{
NSKeyValueObservingOptions.newValue,
},
);
final WeakReference<WebKitWebViewController> weakThis =
WeakReference<WebKitWebViewController>(this);
_uiDelegate = _webKitParams.webKitProxy.createUIDelegate(
instanceManager: _webKitParams._instanceManager,
onCreateWebView: (
WKWebView webView,
WKWebViewConfiguration configuration,
WKNavigationAction navigationAction,
) {
if (!navigationAction.targetFrame.isMainFrame) {
webView.loadRequest(navigationAction.request);
}
},
requestMediaCapturePermission: (
WKUIDelegate instance,
WKWebView webView,
WKSecurityOrigin origin,
WKFrameInfo frame,
WKMediaCaptureType type,
) async {
final void Function(PlatformWebViewPermissionRequest)? callback =
weakThis.target?._onPermissionRequestCallback;
if (callback == null) {
// The default response for iOS is to prompt. See
// https://developer.apple.com/documentation/webkit/wkuidelegate/3763087-webview?language=objc
return WKPermissionDecision.prompt;
} else {
late final Set<WebViewPermissionResourceType> types;
switch (type) {
case WKMediaCaptureType.camera:
types = <WebViewPermissionResourceType>{
WebViewPermissionResourceType.camera
};
break;
case WKMediaCaptureType.cameraAndMicrophone:
types = <WebViewPermissionResourceType>{
WebViewPermissionResourceType.camera,
WebViewPermissionResourceType.microphone
};
break;
case WKMediaCaptureType.microphone:
types = <WebViewPermissionResourceType>{
WebViewPermissionResourceType.microphone
};
break;
case WKMediaCaptureType.unknown:
// The default response for iOS is to prompt. See
// https://developer.apple.com/documentation/webkit/wkuidelegate/3763087-webview?language=objc
return WKPermissionDecision.prompt;
}
final Completer<WKPermissionDecision> decisionCompleter =
Completer<WKPermissionDecision>();
callback(
WebKitWebViewPermissionRequest._(
types: types,
onDecision: decisionCompleter.complete,
),
);
return decisionCompleter.future;
}
},
);
_webView.setUIDelegate(_uiDelegate);
}