Prevent setting user agent string to default value on every rebuild (#4618)
diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index 7bd3387..1337bab 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 2.8.1
+
+* Fixes bug where the default user agent string was being set for every rebuild. See
+ https://github.com/flutter/flutter/issues/94847.
+
## 2.8.0
* Implements new cookie manager for setting cookies and providing initial cookies.
diff --git a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
index 1dec9c1..de55b52 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
@@ -418,11 +418,12 @@
}
Future<void> _setUserAgent(WebSetting<String?> userAgent) {
- if (userAgent.isPresent && userAgent.value != null) {
- return webView.settings.setUserAgentString(userAgent.value!);
+ if (userAgent.isPresent) {
+ // If the string is empty, the system default value will be used.
+ return webView.settings.setUserAgentString(userAgent.value ?? '');
}
- return webView.settings.setUserAgentString('');
+ return Future<void>.value();
}
Future<void> _setZoomEnabled(bool zoomEnabled) {
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index 34bea57..0b78c72 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
description: A Flutter plugin that provides a WebView widget on Android.
repository: https://github.com/flutter/plugins/tree/master/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: 2.8.0
+version: 2.8.1
environment:
sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
index c203ef0..2b25022 100644
--- a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
@@ -483,6 +483,32 @@
});
});
+ testWidgets('no update to userAgentString when there is no change',
+ (WidgetTester tester) async {
+ await buildWidget(tester);
+
+ reset(mockWebSettings);
+
+ await testController.updateSettings(WebSettings(
+ userAgent: const WebSetting<String>.absent(),
+ ));
+
+ verifyNever(mockWebSettings.setUserAgentString(any));
+ });
+
+ testWidgets('update null userAgentString with empty string',
+ (WidgetTester tester) async {
+ await buildWidget(tester);
+
+ reset(mockWebSettings);
+
+ await testController.updateSettings(WebSettings(
+ userAgent: const WebSetting<String?>.of(null),
+ ));
+
+ verify(mockWebSettings.setUserAgentString(''));
+ });
+
testWidgets('currentUrl', (WidgetTester tester) async {
await buildWidget(tester);