From 539a8576db1165389e62945675947e0d1c3c5c3b Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 15:12:01 +0200 Subject: [PATCH 1/8] feat: Introduce setUseWideViewPort on Android (#106999) --- .../webview_flutter/example/lib/main.dart | 3 ++- .../lib/src/android_webview_controller.dart | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index c73749d0622c..31eb005826ad 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -199,7 +199,8 @@ Page resource error: if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) - .setMediaPlaybackRequiresUserGesture(false); + ..setUseWideViewPort(false) + ..setMediaPlaybackRequiresUserGesture(false); } // #enddocregion platform_features diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart index c8326529e591..1e0abd82f963 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart @@ -86,7 +86,7 @@ class AndroidWebViewController extends PlatformWebViewController { _webView.settings.setJavaScriptCanOpenWindowsAutomatically(true); _webView.settings.setSupportMultipleWindows(true); _webView.settings.setLoadWithOverviewMode(true); - _webView.settings.setUseWideViewPort(true); + _webView.settings.setUseWideViewPort(false); _webView.settings.setDisplayZoomControls(false); _webView.settings.setBuiltInZoomControls(true); @@ -599,6 +599,13 @@ class AndroidWebViewController extends PlatformWebViewController { Future setTextZoom(int textZoom) => _webView.settings.setTextZoom(textZoom); + /// Sets whether the WebView should enable support for the "viewport" HTML + /// meta tag or should use a wide viewport. + /// + /// The default is false. + Future setUseWideViewPort(bool use) => + _webView.settings.setUseWideViewPort(use); + /// Enables or disables content URL access. /// /// The default is true. From 5bd589845bc5e4b844ab078657f851c92a426f65 Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 15:56:07 +0200 Subject: [PATCH 2/8] add test --- .../test/android_webview_controller_test.dart | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart index 87bab7f8f5d6..35c8eff93dbe 100644 --- a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart @@ -1576,6 +1576,22 @@ void main() { verify(mockSettings.setMediaPlaybackRequiresUserGesture(true)).called(1); }); + test('setUseWideViewPort', () async { + final MockWebView mockWebView = MockWebView(); + final MockWebSettings mockSettings = MockWebSettings(); + final AndroidWebViewController controller = createControllerWithMocks( + mockWebView: mockWebView, + mockSettings: mockSettings, + ); + + clearInteractions(mockWebView); + + await controller.setUseWideViewPort(true); + + verify(mockWebView.settings).called(1); + verify(mockSettings.setUseWideViewPort(true)).called(1); + }); + test('setAllowContentAccess', () async { final MockWebView mockWebView = MockWebView(); final MockWebSettings mockSettings = MockWebSettings(); From c5d5776cb327e4f42d94a9ce1d270e0cbb2f805f Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 16:02:07 +0200 Subject: [PATCH 3/8] update changelog --- .../webview_flutter/webview_flutter/example/lib/main.dart | 3 +-- packages/webview_flutter/webview_flutter_android/CHANGELOG.md | 4 ++++ packages/webview_flutter/webview_flutter_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index 31eb005826ad..c73749d0622c 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -199,8 +199,7 @@ Page resource error: if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) - ..setUseWideViewPort(false) - ..setMediaPlaybackRequiresUserGesture(false); + .setMediaPlaybackRequiresUserGesture(false); } // #enddocregion platform_features diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 10bd622d9851..4c14e416d36e 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.5.0 + +* Adds support to set using wide view port. See `AndroidWebViewController.setUseWideViewPort`. + ## 4.4.2 * Updates pigeon generated code to fix `ImplicitSamInstance` and `SyntheticAccessor` Kotlin lint diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index 5f6cb957df85..469be25d5476 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 4.4.2 +version: 4.5.0 environment: sdk: ^3.6.0 From c9fb5093aed914606e4bae414665d3251482dd3a Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 16:46:14 +0200 Subject: [PATCH 4/8] change default in test --- .../test/android_webview_controller_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart index 35c8eff93dbe..ec89e0dbd7e3 100644 --- a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart @@ -289,7 +289,7 @@ void main() { .called(1); verify(mockWebSettings.setLoadWithOverviewMode(true)).called(1); verify(mockWebSettings.setSupportMultipleWindows(true)).called(1); - verify(mockWebSettings.setUseWideViewPort(true)).called(1); + verify(mockWebSettings.setUseWideViewPort(false)).called(1); }); test('loadFile without file prefix', () async { From 382562827513225ad2425c2faca72ea795b11038 Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Wed, 30 Apr 2025 13:04:15 +0200 Subject: [PATCH 5/8] viewport example --- .../webview_flutter/example/lib/main.dart | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index c73749d0622c..9df67d1aa447 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -76,6 +76,26 @@ const String kTransparentBackgroundPage = ''' '''; +const String kViewportMetaPage = ''' + + + + Viewport meta test + + + + +
+

Viewport meta test

+ +
+ + +'''; + const String kLogExamplePage = ''' @@ -199,7 +219,8 @@ Page resource error: if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) - .setMediaPlaybackRequiresUserGesture(false); + ..setMediaPlaybackRequiresUserGesture(false) + ..setUseWideViewPort(false); } // #enddocregion platform_features @@ -307,6 +328,7 @@ enum MenuOptions { loadFlutterAsset, loadHtmlString, transparentBackground, + viewportMeta, setCookie, logExample, basicAuthentication, @@ -351,6 +373,8 @@ class SampleMenu extends StatelessWidget { _onLoadHtmlStringExample(); case MenuOptions.transparentBackground: _onTransparentBackground(); + case MenuOptions.viewportMeta: + _onViewportMetaExample(); case MenuOptions.setCookie: _onSetCookie(); case MenuOptions.logExample: @@ -409,6 +433,11 @@ class SampleMenu extends StatelessWidget { value: MenuOptions.transparentBackground, child: Text('Transparent background example'), ), + const PopupMenuItem( + key: ValueKey('ShowViewportMetaExample'), + value: MenuOptions.viewportMeta, + child: Text('Viewport meta example'), + ), const PopupMenuItem( value: MenuOptions.setCookie, child: Text('Set cookie'), @@ -540,6 +569,10 @@ class SampleMenu extends StatelessWidget { return webViewController.loadHtmlString(kTransparentBackgroundPage); } + Future _onViewportMetaExample() { + return webViewController.loadHtmlString(kViewportMetaPage); + } + Widget _getCookieList(String cookies) { if (cookies == '""') { return Container(); From d92f9c7a3d6c7f6b88b97d2ace48d9c74ee9885f Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Thu, 8 May 2025 17:10:08 +0200 Subject: [PATCH 6/8] fix build --- .../webview_flutter/webview_flutter/example/lib/main.dart | 3 +-- packages/webview_flutter/webview_flutter_android/CHANGELOG.md | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index 9df67d1aa447..9766f5db285f 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -219,8 +219,7 @@ Page resource error: if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) - ..setMediaPlaybackRequiresUserGesture(false) - ..setUseWideViewPort(false); + .setMediaPlaybackRequiresUserGesture(false); } // #enddocregion platform_features diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 4c14e416d36e..7eeeb137cd4e 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,6 +1,8 @@ ## 4.5.0 -* Adds support to set using wide view port. See `AndroidWebViewController.setUseWideViewPort`. +* Adds support to set using wide view port. + Change default to `false` to align with native WebViews. + See `AndroidWebViewController.setUseWideViewPort`. ## 4.4.2 From 80186a30ba8cb8a41119dc0436e7558710164bde Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Thu, 8 May 2025 17:13:24 +0200 Subject: [PATCH 7/8] remove key --- packages/webview_flutter/webview_flutter/example/lib/main.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index 9766f5db285f..9c2f49659bbb 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -433,7 +433,6 @@ class SampleMenu extends StatelessWidget { child: Text('Transparent background example'), ), const PopupMenuItem( - key: ValueKey('ShowViewportMetaExample'), value: MenuOptions.viewportMeta, child: Text('Viewport meta example'), ), From 130777c7835c525fdbc8b218f864e202176cb48d Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Thu, 8 May 2025 17:14:58 +0200 Subject: [PATCH 8/8] rename to example --- .../webview_flutter/webview_flutter/example/lib/main.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index 9c2f49659bbb..4ed365b63846 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -80,7 +80,7 @@ const String kViewportMetaPage = ''' - Viewport meta test + Viewport meta example
-

Viewport meta test

+

Viewport meta example