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);
     });
   });
 }