init method
Future<void>
init({
- required BuildContext context,
- required void setState(
- void fn()
- required Uri uri,
Implementation
Future<void> init({
required BuildContext context,
required void Function(void Function() fn) setState,
required Uri uri,
}) async {
if (is_init) {
throw StateError('WebViewController.init may only be called once.');
}
validateUri(uri);
if (is_mobile) {
late final webview_flutter.PlatformWebViewControllerCreationParams params;
if (webview_flutter.WebViewPlatform.instance
is webview_flutter_wkwebview.WebKitWebViewPlatform) {
params =
webview_flutter_wkwebview.WebKitWebViewControllerCreationParams(
allowsInlineMediaPlayback: true,
mediaTypesRequiringUserAction:
const <webview_flutter_wkwebview.PlaybackMediaTypes>{},
);
} else {
params =
const webview_flutter.PlatformWebViewControllerCreationParams();
}
webview_mobile_controller =
webview_flutter.WebViewController.fromPlatformCreationParams(params);
if (!kIsWeb) {
await webview_mobile_controller.setJavaScriptMode(
webview_flutter.JavaScriptMode.unrestricted,
);
await webview_mobile_controller.setNavigationDelegate(
webview_flutter.NavigationDelegate(
onWebResourceError: (webview_flutter.WebResourceError error) {
onLoadError?.call(
WebViewLoadError(
description: error.description,
code: error.errorCode,
isForMainFrame: error.isForMainFrame,
),
);
},
onNavigationRequest: (webview_flutter.NavigationRequest request) {
final requestedUri = Uri.tryParse(request.url);
if (requestedUri == null ||
!allowedSchemes.contains(requestedUri.scheme.toLowerCase())) {
return webview_flutter.NavigationDecision.prevent;
}
onNavigation?.call(requestedUri);
return webview_flutter.NavigationDecision.navigate;
},
),
);
}
await webview_mobile_controller.loadRequest(uri);
is_init = true;
setState(() {});
} else if (is_desktop) {
bool isWebviewAvailable =
await webview_desktop.WebviewWindow.isWebviewAvailable();
if (!isWebviewAvailable) {
throw StateError(
'The native WebView runtime is not available on this device.',
);
}
webview_desktop_controller = await webview_desktop.WebviewWindow.create(
configuration: webview_desktop.CreateConfiguration(
titleBarTopPadding: Platform.isMacOS ? 20 : 0,
),
);
webview_desktop_controller.addOnUrlRequestCallback((url) {
final requestedUri = Uri.tryParse(url);
if (requestedUri != null) {
onNavigation?.call(requestedUri);
}
});
webview_desktop_controller.setOnNavigationErrorCallback((
description,
code,
url,
) {
onLoadError?.call(
WebViewLoadError(description: description, code: code, url: url),
);
});
await webview_desktop_controller.launch(uri.toString());
is_init = true;
setState(() {});
}
}