Merge branch 'wkwebview_nav_update' into intf_nav_update
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/v4/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/v4/src/webkit_webview_controller.dart
index 117aa78..ee984dd 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/v4/src/webkit_webview_controller.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/v4/src/webkit_webview_controller.dart
@@ -536,13 +536,17 @@
WKNavigationAction action,
) async {
if (weakThis.target?._onNavigationRequest != null) {
- final bool allow = await weakThis.target!._onNavigationRequest!(
+ final NavigationDecision decision =
+ await weakThis.target!._onNavigationRequest!(NavigationRequest(
url: action.request.url,
- isForMainFrame: action.targetFrame.isMainFrame,
- );
- return allow
- ? WKNavigationActionPolicy.allow
- : WKNavigationActionPolicy.cancel;
+ isMainFrame: action.targetFrame.isMainFrame,
+ ));
+ switch (decision) {
+ case NavigationDecision.prevent:
+ return WKNavigationActionPolicy.cancel;
+ case NavigationDecision.navigate:
+ return WKNavigationActionPolicy.allow;
+ }
}
return WKNavigationActionPolicy.allow;
},
@@ -580,41 +584,37 @@
// Used to set `WKWebView.setNavigationDelegate` in `WebKitWebViewController`.
late final WKNavigationDelegate _navigationDelegate;
- void Function(String url)? _onPageFinished;
- void Function(String url)? _onPageStarted;
- void Function(int progress)? _onProgress;
- void Function(WebResourceError error)? _onWebResourceError;
- FutureOr<bool> Function({required String url, required bool isForMainFrame})?
- _onNavigationRequest;
+ PageEventCallback? _onPageFinished;
+ PageEventCallback? _onPageStarted;
+ ProgressCallback? _onProgress;
+ WebResourceErrorCallback? _onWebResourceError;
+ NavigationRequestCallback? _onNavigationRequest;
@override
- Future<void> setOnPageFinished(
- void Function(String url) onPageFinished,
- ) async {
+ Future<void> setOnPageFinished(PageEventCallback onPageFinished) async {
_onPageFinished = onPageFinished;
}
@override
- Future<void> setOnPageStarted(void Function(String url) onPageStarted) async {
+ Future<void> setOnPageStarted(PageEventCallback onPageStarted) async {
_onPageStarted = onPageStarted;
}
@override
- Future<void> setOnProgress(void Function(int progress) onProgress) async {
+ Future<void> setOnProgress(ProgressCallback onProgress) async {
_onProgress = onProgress;
}
@override
Future<void> setOnWebResourceError(
- void Function(WebResourceError error) onWebResourceError,
+ WebResourceErrorCallback onWebResourceError,
) async {
_onWebResourceError = onWebResourceError;
}
@override
Future<void> setOnNavigationRequest(
- FutureOr<bool> Function({required String url, required bool isForMainFrame})
- onNavigationRequest,
+ NavigationRequestCallback onNavigationRequest,
) async {
_onNavigationRequest = onNavigationRequest;
}
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
index 40b7bf8..8299196 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
@@ -19,7 +19,12 @@
flutter:
sdk: flutter
path: ^1.8.0
- webview_flutter_platform_interface: ^1.9.3
+ # TODO: Remove. Do not merge.
+ webview_flutter_platform_interface:
+ git:
+ url: git@github.com:Baseflow/plugins.git
+ ref: issue/94051_navigation_delegate_typedefs
+ path: packages/webview_flutter/webview_flutter_platform_interface
dev_dependencies:
build_runner: ^2.1.5
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_navigation_delegate_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_navigation_delegate_test.dart
index fe57e94..664f66a 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_navigation_delegate_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_navigation_delegate_test.dart
@@ -159,15 +159,11 @@
),
);
- late final String callbackUrl;
- late final bool callbackIsMainFrame;
- FutureOr<bool> onNavigationRequest({
- required String url,
- required bool isForMainFrame,
- }) {
- callbackUrl = url;
- callbackIsMainFrame = isForMainFrame;
- return true;
+ late final NavigationRequest callbackRequest;
+ FutureOr<NavigationDecision> onNavigationRequest(
+ NavigationRequest request) {
+ callbackRequest = request;
+ return NavigationDecision.navigate;
}
webKitDelgate.setOnNavigationRequest(onNavigationRequest);
@@ -184,8 +180,8 @@
completion(WKNavigationActionPolicy.allow),
);
- expect(callbackUrl, 'https://www.google.com');
- expect(callbackIsMainFrame, isFalse);
+ expect(callbackRequest.url, 'https://www.google.com');
+ expect(callbackRequest.isMainFrame, isFalse);
});
});
}