Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,9 @@ private void applySettings(Map<String, Object> settings) {

webView.setWebViewClient(webViewClient);
break;
case "zoomEnabled":
updateZoomMode((boolean) settings.get(key));
break;
default:
throw new IllegalArgumentException("Unknown WebView setting: " + key);
}
Expand All @@ -214,6 +217,14 @@ private void updateJsMode(int mode) {
}
}

private void updateZoomMode(boolean mode) {
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
// Pop-up zoom controls disabled. This is a temporary stop because dialog is not responding to touch events.
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setBuiltInZoomControls(mode);
}

private void registerJavaScriptChannelNames(List<String> channelNames) {
for (String channelName : channelNames) {
webView.addJavascriptInterface(
Expand Down
1 change: 1 addition & 0 deletions packages/webview_flutter/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class WebViewExample extends StatelessWidget {
body: Builder(builder: (BuildContext context) {
return WebView(
initialUrl: 'https://flutter.dev',
zoomEnabled: true,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
Expand Down
12 changes: 12 additions & 0 deletions packages/webview_flutter/lib/webview_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ class WebView extends StatefulWidget {
this.navigationDelegate,
this.gestureRecognizers,
this.onPageFinished,
this.zoomEnabled = false,
}) : assert(javascriptMode != null),
super(key: key);

Expand Down Expand Up @@ -204,6 +205,10 @@ class WebView extends StatefulWidget {
/// directly in the HTML has been loaded and code injected with
/// [WebViewController.evaluateJavascript] can assume this.
final PageFinishedCallback onPageFinished;

/// Enable/Disable zoom
/// Note: no-op on IOS
final bool zoomEnabled;

@override
State<StatefulWidget> createState() => _WebViewState();
Expand Down Expand Up @@ -324,22 +329,26 @@ class _WebSettings {
_WebSettings({
this.javascriptMode,
this.hasNavigationDelegate,
this.zoomEnabled,
});

static _WebSettings fromWidget(WebView widget) {
return _WebSettings(
javascriptMode: widget.javascriptMode,
hasNavigationDelegate: widget.navigationDelegate != null,
zoomEnabled: widget.zoomEnabled,
);
}

final JavascriptMode javascriptMode;
final bool hasNavigationDelegate;
final bool zoomEnabled;

Map<String, dynamic> toMap() {
return <String, dynamic>{
'jsMode': javascriptMode.index,
'hasNavigationDelegate': hasNavigationDelegate,
'zoomEnabled': zoomEnabled,
};
}

Expand All @@ -351,6 +360,9 @@ class _WebSettings {
if (hasNavigationDelegate != newSettings.hasNavigationDelegate) {
updates['hasNavigationDelegate'] = newSettings.hasNavigationDelegate;
}
if (zoomEnabled != newSettings.zoomEnabled) {
updates['zoomEnabled'] = newSettings.zoomEnabled;
}
return updates;
}
}
Expand Down