From 45b8101628a0b65354164f969df3541cab9689f7 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Mon, 2 Dec 2024 11:18:52 +0800 Subject: [PATCH 01/11] [webview_flutter] Add a listener for the canGoBack property change on the iOS platform. --- .../lib/src/webkit_webview_controller.dart | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart index ae254ef52fe..648ea0780c1 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart @@ -160,6 +160,14 @@ class WebKitWebViewController extends PlatformWebViewController { }, ); + _webView.addObserver( + _webView, + keyPath: 'canGoBack', + options: { + NSKeyValueObservingOptions.newValue, + }, + ); + final WeakReference weakThis = WeakReference(this); _uiDelegate = _webKitParams.webKitProxy.createUIDelegate( @@ -299,6 +307,12 @@ class WebKitWebViewController extends PlatformWebViewController { final NSUrl? url = change[NSKeyValueChangeKey.newValue] as NSUrl?; urlChangeCallback(UrlChange(url: await url?.getAbsoluteString())); } + case 'canGoBack': + if (_onCanGoBackChangeCallback != null) { + final bool canGoBack = + change[NSKeyValueChangeKey.newValue]! as bool; + _onCanGoBackChangeCallback!(canGoBack); + } } }; }), @@ -315,6 +329,7 @@ class WebKitWebViewController extends PlatformWebViewController { bool _zoomEnabled = true; WebKitNavigationDelegate? _currentNavigationDelegate; + void Function(bool)? _onCanGoBackChangeCallback; void Function(JavaScriptConsoleMessage)? _onConsoleMessageCallback; void Function(PlatformWebViewPermissionRequest)? _onPermissionRequestCallback; @@ -602,6 +617,11 @@ class WebKitWebViewController extends PlatformWebViewController { .addUserScript(userScript); } + /// Sets the listener for canGoBack changes. + Future setOnCanGoBackChange(void Function(bool) callback) async { + _onCanGoBackChangeCallback = callback; + } + /// Sets a callback that notifies the host application of any log messages /// written to the JavaScript console. /// From 2b61dfdcd5d94adcfff7c0477cb16d9b0ed7c6ca Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Mon, 2 Dec 2024 11:40:25 +0800 Subject: [PATCH 02/11] Adjust parameter names. --- .../lib/src/webkit_webview_controller.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart index 648ea0780c1..fe2ee6102d4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart @@ -618,8 +618,9 @@ class WebKitWebViewController extends PlatformWebViewController { } /// Sets the listener for canGoBack changes. - Future setOnCanGoBackChange(void Function(bool) callback) async { - _onCanGoBackChangeCallback = callback; + Future setOnCanGoBackChange( + void Function(bool) onCanGoBackChangeCallback) async { + _onCanGoBackChangeCallback = onCanGoBackChangeCallback; } /// Sets a callback that notifies the host application of any log messages From 809f5f0bd8fb331971c583e4cdc2b1f764f4a137 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Wed, 11 Dec 2024 10:06:26 +0800 Subject: [PATCH 03/11] add test --- .../test/webkit_webview_controller_test.dart | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart index 4e1208641e8..5fcac5fc406 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart @@ -1550,6 +1550,53 @@ window.addEventListener("error", function(e) { }); }); + test('setOnCanGoBackChange', () async { + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); + + late final void Function( + String keyPath, + NSObject object, + Map change, + ) webViewObserveValue; + + final WebKitWebViewController controller = createControllerWithMocks( + createMockWebView: ( + _, { + void Function( + String keyPath, + NSObject object, + Map change, + )? observeValue, + }) { + webViewObserveValue = observeValue!; + return mockWebView; + }, + ); + + verify( + mockWebView.addObserver( + mockWebView, + keyPath: 'canGoBack', + options: { + NSKeyValueObservingOptions.newValue, + }, + ), + ); + + late final bool callbackCanGoBack; + + await controller.setOnCanGoBackChange( + (bool canGoBack) => callbackCanGoBack = canGoBack); + + webViewObserveValue( + 'canGoBack', + mockWebView, + {NSKeyValueChangeKey.newValue: true}, + ); + + expect(callbackCanGoBack, true); + }); + test('setOnScrollPositionChange', () async { final WebKitWebViewController controller = createControllerWithMocks(); From 194542e7b6ba5ef48cbb0a520a03ee25c29f8017 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Wed, 11 Dec 2024 11:26:28 +0800 Subject: [PATCH 04/11] fix: integration_test --- .../lib/src/webkit_webview_controller.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart index fe2ee6102d4..dd0e91e2705 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart @@ -308,10 +308,10 @@ class WebKitWebViewController extends PlatformWebViewController { urlChangeCallback(UrlChange(url: await url?.getAbsoluteString())); } case 'canGoBack': - if (_onCanGoBackChangeCallback != null) { + if (controller._onCanGoBackChangeCallback != null) { final bool canGoBack = change[NSKeyValueChangeKey.newValue]! as bool; - _onCanGoBackChangeCallback!(canGoBack); + controller._onCanGoBackChangeCallback!(canGoBack); } } }; From 1192372699a5b05ea88a1c0663433b9e97229769 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Fri, 20 Dec 2024 19:00:14 +0800 Subject: [PATCH 05/11] add CHANGELOG --- packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 0cd1ce8e29b..8db395ae493 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,6 +1,7 @@ ## NEXT * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. +* Adds a change listener for the canGoBack attribute. ## 3.16.3 From 3e8887cd0d9ba366bd0eb7b648afe0d09eba266c Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Mon, 23 Dec 2024 09:13:21 +0800 Subject: [PATCH 06/11] add CHANGELOG --- packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 8db395ae493..8444f160925 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 3.16.4 * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. * Adds a change listener for the canGoBack attribute. From 4b23e2deb19b29f159b81d797e57a6ee572c5775 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Mon, 23 Dec 2024 10:11:52 +0800 Subject: [PATCH 07/11] =?UTF-8?q?revert=E2=80=8C:=20CHANGELOG.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 8444f160925..8db395ae493 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,4 +1,4 @@ -## 3.16.4 +## NEXT * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. * Adds a change listener for the canGoBack attribute. From 46a83d9b8bd36c15c2f27fe009e002c0a311bfa9 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Tue, 7 Jan 2025 16:49:04 +0800 Subject: [PATCH 08/11] add CHANGELOG --- packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 2 +- packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 8db395ae493..8444f160925 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 3.16.4 * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. * Adds a change listener for the canGoBack attribute. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 735efa3f86e..f69a594e9e2 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.16.3 +version: 3.16.4 environment: sdk: ^3.5.0 From 099a47751330d863ac85a8338106a9b782886dc1 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:12:33 -0500 Subject: [PATCH 09/11] update changelog --- .../webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 8444f160925..1b588baf226 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,7 +1,8 @@ ## 3.16.4 +* Adds a change listener for the `canGoBack` property. See + `WebKitWebViewController.setOnCanGoBackChange`. * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. -* Adds a change listener for the canGoBack attribute. ## 3.16.3 From f55a9c12b42ba04f07136894bf1fc7bb5d6ec419 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:14:14 -0500 Subject: [PATCH 10/11] add minor version bump --- packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 1b588baf226..fe76d134677 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,4 +1,4 @@ -## 3.16.4 +## 3.17.0 * Adds a change listener for the `canGoBack` property. See `WebKitWebViewController.setOnCanGoBackChange`. From 06abdb0aaf88225e07c4bf58a939eaacebf406fe Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:15:35 -0500 Subject: [PATCH 11/11] fix pubspec --- packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index f69a594e9e2..58d02d65805 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.16.4 +version: 3.17.0 environment: sdk: ^3.5.0