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(); 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/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. 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 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..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 { @@ -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();