Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

[webview_flutter]Add zoom to android webview #3325

Merged
merged 101 commits into from
Nov 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
c6c42eb
Adding zoom support and defaulting to wideViewPort(true)
NickalasB Dec 11, 2020
4c7fdff
Correct webSettings enabling zoom
NickalasB Dec 11, 2020
1b578a7
Setting wideViewPort to false
NickalasB Dec 11, 2020
b850adb
setLoadWithOverviewMode to true by default
NickalasB Dec 11, 2020
5928ebc
Tweak WebSettings to try to get loadWithOverviewMode working
NickalasB Dec 11, 2020
fe4e189
Adding tests
NickalasB Dec 11, 2020
c85bd73
Cleaning up code:
NickalasB Dec 12, 2020
8e7da7e
Updating documentation
NickalasB Dec 12, 2020
636e99f
Updating version and CHANGELOG.md
NickalasB Dec 12, 2020
db99bbd
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 12, 2020
05ba64f
Updating version and changelog after merging in master
NickalasB Dec 12, 2020
b079f08
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 14, 2020
e35a717
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 15, 2020
242019d
Bumping version after merging in master
NickalasB Dec 15, 2020
b60dd1a
Adding back -nullsafety suffix to follow prerelease guidelines
NickalasB Dec 15, 2020
f236a61
Formatting comments
NickalasB Dec 15, 2020
84fe69a
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 17, 2020
550ea5f
Correcting version# after merging in master
NickalasB Dec 17, 2020
2b4b03f
Updating project.pbxproj after running app on iOS
NickalasB Dec 17, 2020
578321b
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 17, 2020
63d7085
Fixing tests and analyze issues after merging in master
NickalasB Dec 17, 2020
cb4ab40
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 18, 2020
a2110c7
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 19, 2020
b45594c
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 21, 2020
df9a0a9
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Dec 22, 2020
e29b045
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Feb 2, 2021
4d6da85
Updating to Flutter team naming conventions
NickalasB Feb 2, 2021
673e896
More explicitly calling out params ignored on iOS
NickalasB Feb 2, 2021
0094921
Added TODO per PR comment
NickalasB Feb 2, 2021
9e82faf
Fixing accidentally renamed native Android methods
NickalasB Feb 2, 2021
01760ef
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Mar 1, 2021
a0e64b5
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Mar 3, 2021
2b15589
Updating plugin version to latest version with zoom enabled
NickalasB Mar 3, 2021
3b29b45
Add some defense against null values
NickalasB Mar 8, 2021
fc41c1e
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Mar 8, 2021
a5f2be6
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Sep 7, 2021
69a4b7d
Update changelog message formatting to conform to new NEXT rules
NickalasB Sep 7, 2021
0e6d931
Adding my name to contributors file
NickalasB Sep 7, 2021
40fca06
Incorporate disabling zoom on iOS
NickalasB Sep 7, 2021
bfcb892
Simplify API to only have one shared zoomEnabled param for Android an…
NickalasB Sep 7, 2021
d1bcd6f
Fixing java formatting issue
NickalasB Sep 8, 2021
428fd91
Adding corresponding WebView builder default setters and updating tests
NickalasB Sep 8, 2021
d49b19c
Fixing formatting in iOS code
NickalasB Sep 8, 2021
d0efc47
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Sep 8, 2021
87da4bf
Addressing some lint/formatting issues
NickalasB Sep 8, 2021
76931cb
Following format suggestions from CI format helper
NickalasB Sep 8, 2021
0aeb887
More format fixes
NickalasB Sep 8, 2021
5816db7
More format fixes
NickalasB Sep 8, 2021
d9593fb
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Sep 8, 2021
31a20db
Removing leftover test artifacts from original implementation
NickalasB Sep 9, 2021
55d11dd
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Sep 10, 2021
b40f51c
Formatting after merging in master
NickalasB Sep 10, 2021
8dd870b
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Sep 27, 2021
31407b9
Adjustments after merging in federated architecture
NickalasB Sep 27, 2021
243edbd
Update versions after federated plugin changes
NickalasB Sep 27, 2021
8482c6e
Remove leftover file after Federated Plugin migration
NickalasB Sep 27, 2021
ae66c70
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Sep 27, 2021
bdb07f7
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Sep 30, 2021
d3f9295
Update to path-based dependency overrides per contribution guidelines
NickalasB Sep 30, 2021
41563a9
Updating platform-specific WebView implementations
NickalasB Oct 1, 2021
1cf973b
Correcting version numbers
NickalasB Oct 1, 2021
84c91ff
Correcting version number per semver/PR feedback
NickalasB Oct 1, 2021
d157760
Updating versioning to better reflect semver standards
NickalasB Oct 1, 2021
6388d77
Addressing PR feedback:
NickalasB Oct 1, 2021
6c046eb
Formatting JS string to read better
NickalasB Oct 1, 2021
505e912
Update naming to reflect enabling instead of setting
NickalasB Oct 1, 2021
7b65cc6
Adding name to AUTHORS files
NickalasB Oct 1, 2021
bd0b7b2
Removing setters for params that should always have default values
NickalasB Oct 1, 2021
8a6662d
Updating formatting
NickalasB Oct 1, 2021
3cefa7a
One more small formatting change
NickalasB Oct 1, 2021
439e13b
Removing duplicated string
NickalasB Oct 4, 2021
f13a0dd
Removing unneeded null checks for non-nullable bool
NickalasB Oct 5, 2021
3fd5a64
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Oct 5, 2021
004312b
Updating some documentation/naming and removing unused java variables
NickalasB Oct 5, 2021
5c72815
Updating android AUTHORS/CHANGELOG/pubspec.yaml
NickalasB Oct 5, 2021
1172d73
Adding Java implementation for zoomEnabled
NickalasB Oct 5, 2021
d84d39f
Reverting changes to platform_interface made during follow-up platfor…
NickalasB Oct 5, 2021
68283a0
Updating Android WebView with zoomEnabled param
NickalasB Oct 5, 2021
3d5467c
Updating android pubspec version of platform_interface
NickalasB Oct 5, 2021
b0f92d6
Updating iOS pubspec/AUTHORS/CHANGELOG
NickalasB Oct 5, 2021
a342931
Adding iOS implementation for zoomEnabled
NickalasB Oct 5, 2021
b6b4c30
Updating iOS pubspec platform_interface version and WebView
NickalasB Oct 5, 2021
ef139b6
Removing extra line in Android pubspec.yaml
NickalasB Oct 5, 2021
11720f3
Updating iOS Authors file
NickalasB Oct 5, 2021
d049ef6
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Oct 6, 2021
8b7bcb0
Merge branch 'master' into implement_zoomEnabled_for_ios_and_android
NickalasB Oct 6, 2021
64db0db
Update platform_interface_version
NickalasB Oct 6, 2021
a5af43d
Merge branch 'implement_zoomEnabled_for_ios_and_android` into add_zoo…
NickalasB Oct 6, 2021
74addca
Adding test coverage for iOS
NickalasB Oct 21, 2021
fda39c8
Merge branch 'implement_zoomEnabled_for_ios_and_android' into add_zoo…
NickalasB Oct 21, 2021
5238f60
Updating formatting
NickalasB Oct 21, 2021
eab9765
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Oct 21, 2021
955440d
Addressing PR feedback.
NickalasB Oct 27, 2021
7fd7879
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Oct 27, 2021
6552a1c
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Oct 27, 2021
ee180b6
Updating pubspec after zoomEnabled flutter_android and flutter_wkwebv…
NickalasB Oct 28, 2021
06e24d1
Fixing some formatting issues after some cherry picking from previous…
NickalasB Oct 28, 2021
7a1662e
Formatting after merge and removing unneeded null check
NickalasB Oct 28, 2021
cc9f536
Addressing PR comments
NickalasB Nov 4, 2021
a1dbd36
Reverting change to wrong file
NickalasB Nov 4, 2021
e17df4c
Merge branch 'master' into add_zoom_to_android_webview
NickalasB Nov 4, 2021
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
2 changes: 2 additions & 0 deletions packages/webview_flutter/webview_flutter/AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,5 @@ Aleksandr Yurkovskiy <[email protected]>
Anton Borries <[email protected]>
Alex Li <[email protected]>
Rahul Raj <[email protected]>
Nick Bradshaw <[email protected]>
Antonino Di Natale <[email protected]>
4 changes: 4 additions & 0 deletions packages/webview_flutter/webview_flutter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 2.3.0

* Add ability to enable/disable zoom functionality.

## 2.2.0

* Added `runJavascript` and `runJavascriptForResult` to supersede `evaluateJavascript`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:webview_flutter/platform_interface.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:integration_test/integration_test.dart';

void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

Expand Down
14 changes: 14 additions & 0 deletions packages/webview_flutter/webview_flutter/lib/src/webview.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ class WebView extends StatefulWidget {
this.debuggingEnabled = false,
this.gestureNavigationEnabled = false,
this.userAgent,
this.zoomEnabled = true,
this.initialMediaPlaybackPolicy =
AutoMediaPlaybackPolicy.require_user_action_for_all_media_types,
this.allowsInlineMediaPlayback = false,
Expand Down Expand Up @@ -268,6 +269,12 @@ class WebView extends StatefulWidget {
/// By default `userAgent` is null.
final String? userAgent;

/// A Boolean value indicating whether the WebView should support zooming
/// using its on-screen zoom controls and gestures.
///
/// By default 'zoomEnabled' is true
final bool zoomEnabled;

/// Which restrictions apply on automatic media playback.
///
/// This initial value is applied to the platform's webview upon creation. Any following
Expand Down Expand Up @@ -359,6 +366,7 @@ WebSettings _webSettingsFromWidget(WebView widget) {
gestureNavigationEnabled: widget.gestureNavigationEnabled,
allowsInlineMediaPlayback: widget.allowsInlineMediaPlayback,
userAgent: WebSetting<String?>.of(widget.userAgent),
zoomEnabled: widget.zoomEnabled,
);
}

Expand All @@ -374,12 +382,14 @@ WebSettings _clearUnchangedWebSettings(
assert(newValue.hasNavigationDelegate != null);
assert(newValue.debuggingEnabled != null);
assert(newValue.userAgent != null);
assert(newValue.zoomEnabled != null);

JavascriptMode? javascriptMode;
bool? hasNavigationDelegate;
bool? hasProgressTracking;
bool? debuggingEnabled;
WebSetting<String?> userAgent = WebSetting.absent();
bool? zoomEnabled;
if (currentValue.javascriptMode != newValue.javascriptMode) {
javascriptMode = newValue.javascriptMode;
}
Expand All @@ -395,13 +405,17 @@ WebSettings _clearUnchangedWebSettings(
if (currentValue.userAgent != newValue.userAgent) {
userAgent = newValue.userAgent;
}
if (currentValue.zoomEnabled != newValue.zoomEnabled) {
zoomEnabled = newValue.zoomEnabled;
}

return WebSettings(
javascriptMode: javascriptMode,
hasNavigationDelegate: hasNavigationDelegate,
hasProgressTracking: hasProgressTracking,
debuggingEnabled: debuggingEnabled,
userAgent: userAgent,
zoomEnabled: zoomEnabled,
);
}

Expand Down
4 changes: 2 additions & 2 deletions packages/webview_flutter/webview_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: webview_flutter
description: A Flutter plugin that provides a WebView widget on Android and iOS.
repository: https://github.com/flutter/plugins/tree/master/packages/webview_flutter/webview_flutter
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
version: 2.2.0
version: 2.3.0

environment:
sdk: ">=2.14.0 <3.0.0"
Expand All @@ -19,8 +19,8 @@ flutter:
dependencies:
flutter:
sdk: flutter
webview_flutter_platform_interface: ^1.2.0
webview_flutter_android: ^2.2.0
webview_flutter_platform_interface: ^1.2.0
webview_flutter_wkwebview: ^2.2.0

dev_dependencies:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import 'package:flutter/src/foundation/basic_types.dart';
import 'package:flutter/src/gestures/recognizer.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';

typedef void VoidCallback();

Expand Down Expand Up @@ -915,6 +915,50 @@ void main() {
});
});

group('zoomEnabled', () {
testWidgets('Enable zoom', (WidgetTester tester) async {
await tester.pumpWidget(const WebView(
zoomEnabled: true,
));

final FakePlatformWebView platformWebView =
fakePlatformViewsController.lastCreatedView!;

expect(platformWebView.zoomEnabled, isTrue);
});

testWidgets('defaults to true', (WidgetTester tester) async {
await tester.pumpWidget(const WebView());

final FakePlatformWebView platformWebView =
fakePlatformViewsController.lastCreatedView!;

expect(platformWebView.zoomEnabled, isTrue);
});

testWidgets('can be changed', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
await tester.pumpWidget(WebView(key: key));

final FakePlatformWebView platformWebView =
fakePlatformViewsController.lastCreatedView!;

await tester.pumpWidget(WebView(
key: key,
zoomEnabled: true,
));

expect(platformWebView.zoomEnabled, isTrue);

await tester.pumpWidget(WebView(
key: key,
zoomEnabled: false,
));

expect(platformWebView.zoomEnabled, isFalse);
});
});

group('Custom platform implementation', () {
setUpAll(() {
WebView.platform = MyWebViewPlatform();
Expand Down Expand Up @@ -944,6 +988,7 @@ void main() {
debuggingEnabled: false,
userAgent: WebSetting<String?>.of(null),
gestureNavigationEnabled: true,
zoomEnabled: true,
),
)));
});
Expand Down Expand Up @@ -1011,6 +1056,7 @@ class FakePlatformWebView {
params['settings']['hasNavigationDelegate'] ?? false;
debuggingEnabled = params['settings']['debuggingEnabled'];
userAgent = params['settings']['userAgent'];
zoomEnabled = params['settings']['zoomEnabled'] ?? true;
channel = MethodChannel(
'plugins.flutter.io/webview_$id', const StandardMethodCodec());
channel.setMockMethodCallHandler(onMethodCall);
Expand All @@ -1030,6 +1076,7 @@ class FakePlatformWebView {
bool? hasNavigationDelegate;
bool? debuggingEnabled;
String? userAgent;
bool? zoomEnabled;

String? lastRunJavaScriptString;

Expand All @@ -1050,6 +1097,9 @@ class FakePlatformWebView {
debuggingEnabled = call.arguments['debuggingEnabled'];
}
userAgent = call.arguments['userAgent'];
if (call.arguments['zoomEnabled'] != null) {
zoomEnabled = call.arguments['zoomEnabled'];
}
break;
case 'canGoBack':
return Future<bool>.sync(() => currentPosition > 0);
Expand Down Expand Up @@ -1307,7 +1357,8 @@ class MatchesWebSettings extends Matcher {
_webSettings!.debuggingEnabled == webSettings.debuggingEnabled &&
_webSettings!.gestureNavigationEnabled ==
webSettings.gestureNavigationEnabled &&
_webSettings!.userAgent == webSettings.userAgent;
_webSettings!.userAgent == webSettings.userAgent &&
_webSettings!.zoomEnabled == webSettings.zoomEnabled;
}
}

Expand Down