Merge branch 'issue/94051_navigation_delegate_typedefs' into intf_nav_update
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
index 17b8652..d886c2a 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.9.4
+
+* Exposes type definitions for commonly used function signatures in the `PlatformNavigationDelegate` class.
+
## 1.9.3
* Updates minimum Flutter version to 2.10.
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart
index a66f1de..2df6cff 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart
@@ -9,6 +9,19 @@
import 'webview_platform.dart';
+/// Signature for callbacks that report a pending navigation request.
+typedef NavigationRequestCallback = FutureOr<NavigationDecision> Function(
+ NavigationRequest navigationRequest);
+
+/// Signature for callbacks that report page events triggered by the native web view.
+typedef PageEventCallback = void Function(String url);
+
+/// Signature for callbacks that report loading progress of a page.
+typedef ProgressCallback = void Function(int progress);
+
+/// Signature for callbacks that report a resource loading error.
+typedef WebResourceErrorCallback = void Function(WebResourceError error);
+
/// An interface defining navigation events that occur on the native platform.
///
/// The [PlatformWebViewController] is notifying this delegate on events that
@@ -40,8 +53,7 @@
///
/// See [PlatformWebViewController.setPlatformNavigationDelegate].
Future<void> setOnNavigationRequest(
- FutureOr<bool> Function({required String url, required bool isForMainFrame})
- onNavigationRequest,
+ NavigationRequestCallback onNavigationRequest,
) {
throw UnimplementedError(
'setOnNavigationRequest is not implemented on the current platform.');
@@ -51,7 +63,7 @@
///
/// See [PlatformWebViewController.setPlatformNavigationDelegate].
Future<void> setOnPageStarted(
- void Function(String url) onPageStarted,
+ PageEventCallback onPageStarted,
) {
throw UnimplementedError(
'setOnPageStarted is not implemented on the current platform.');
@@ -61,7 +73,7 @@
///
/// See [PlatformWebViewController.setPlatformNavigationDelegate].
Future<void> setOnPageFinished(
- void Function(String url) onPageFinished,
+ PageEventCallback onPageFinished,
) {
throw UnimplementedError(
'setOnPageFinished is not implemented on the current platform.');
@@ -71,7 +83,7 @@
///
/// See [PlatformWebViewController.setPlatformNavigationDelegate].
Future<void> setOnProgress(
- void Function(int progress) onProgress,
+ ProgressCallback onProgress,
) {
throw UnimplementedError(
'setOnProgress is not implemented on the current platform.');
@@ -81,7 +93,7 @@
///
/// See [PlatformWebViewController.setPlatformNavigationDelegate].
Future<void> setOnWebResourceError(
- void Function(WebResourceError error) onWebResourceError,
+ WebResourceErrorCallback onWebResourceError,
) {
throw UnimplementedError(
'setOnWebResourceError is not implemented on the current platform.');
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/navigation_decision.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/navigation_decision.dart
new file mode 100644
index 0000000..d8178ac
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/navigation_decision.dart
@@ -0,0 +1,12 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/// A decision on how to handle a navigation request.
+enum NavigationDecision {
+ /// Prevent the navigation from taking place.
+ prevent,
+
+ /// Allow the navigation to take place.
+ navigate,
+}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/navigation_request.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/navigation_request.dart
new file mode 100644
index 0000000..ee3f1f9
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/navigation_request.dart
@@ -0,0 +1,18 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/// Defines the parameters of the pending navigation callback.
+class NavigationRequest {
+ /// Creates a [NavigationRequest].
+ const NavigationRequest({
+ required this.url,
+ required this.isMainFrame,
+ });
+
+ /// The URL of the pending navigation request.
+ final String url;
+
+ /// Indicates whether the request was made in the web site's main frame or a subframe.
+ final bool isMainFrame;
+}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart
index 05504ff..4df8800 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart
@@ -5,6 +5,8 @@
export 'javascript_message.dart';
export 'javascript_mode.dart';
export 'load_request_params.dart';
+export 'navigation_decision.dart';
+export 'navigation_request.dart';
export 'platform_navigation_delegate_creation_params.dart';
export 'platform_webview_controller_creation_params.dart';
export 'platform_webview_cookie_manager_creation_params.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
index 5b98154..4b14872 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 1.9.3
+version: 1.9.4
environment:
sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart
index dd4a26c..a9f6151 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart
@@ -61,7 +61,7 @@
expect(
() => callbackDelegate.setOnNavigationRequest(
- ({required bool isForMainFrame, required String url}) => true),
+ (NavigationRequest navigationRequest) => NavigationDecision.navigate),
throwsUnimplementedError,
);
});
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart
index 47e6737..79e5365 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart
@@ -38,31 +38,30 @@
as _i2.PlatformNavigationDelegateCreationParams);
@override
_i4.Future<void> setOnNavigationRequest(
- _i4.FutureOr<bool> Function({bool isForMainFrame, String url})?
- onNavigationRequest) =>
+ _i3.NavigationRequestCallback? onNavigationRequest) =>
(super.noSuchMethod(
Invocation.method(#setOnNavigationRequest, [onNavigationRequest]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
- _i4.Future<void> setOnPageStarted(void Function(String)? onPageStarted) =>
+ _i4.Future<void> setOnPageStarted(_i3.PageEventCallback? onPageStarted) =>
(super.noSuchMethod(Invocation.method(#setOnPageStarted, [onPageStarted]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
- _i4.Future<void> setOnPageFinished(void Function(String)? onPageFinished) =>
+ _i4.Future<void> setOnPageFinished(_i3.PageEventCallback? onPageFinished) =>
(super.noSuchMethod(
Invocation.method(#setOnPageFinished, [onPageFinished]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
- _i4.Future<void> setOnProgress(void Function(int)? onProgress) =>
+ _i4.Future<void> setOnProgress(_i3.ProgressCallback? onProgress) =>
(super.noSuchMethod(Invocation.method(#setOnProgress, [onProgress]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
_i4.Future<void> setOnWebResourceError(
- void Function(_i2.WebResourceError)? onWebResourceError) =>
+ _i3.WebResourceErrorCallback? onWebResourceError) =>
(super.noSuchMethod(
Invocation.method(#setOnWebResourceError, [onWebResourceError]),
returnValue: Future<void>.value(),