[webview_flutter_android] Fix throwing `StateError` when `onShowFileChooser` was nonnull (#6995)
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
index f7d536c..c5d301d 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
@@ -927,7 +927,7 @@
Future<void> setSynchronousReturnValueForOnShowFileChooser(
bool value,
) {
- if (value && onShowFileChooser != null) {
+ if (value && onShowFileChooser == null) {
throw StateError(
'Setting this to true requires `onShowFileChooser` to be nonnull.',
);
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
index bd01494..9878d7a 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
@@ -861,6 +861,58 @@
expect(result[1], params);
});
+ test('setSynchronousReturnValueForOnShowFileChooser', () {
+ final MockTestWebChromeClientHostApi mockHostApi =
+ MockTestWebChromeClientHostApi();
+ TestWebChromeClientHostApi.setup(mockHostApi);
+
+ WebChromeClient.api =
+ WebChromeClientHostApiImpl(instanceManager: instanceManager);
+
+ final WebChromeClient webChromeClient = WebChromeClient.detached();
+ instanceManager.addHostCreatedInstance(webChromeClient, 2);
+
+ webChromeClient.setSynchronousReturnValueForOnShowFileChooser(false);
+
+ verify(
+ mockHostApi.setSynchronousReturnValueForOnShowFileChooser(2, false),
+ );
+ });
+
+ test(
+ 'setSynchronousReturnValueForOnShowFileChooser throws StateError when onShowFileChooser is null',
+ () {
+ final MockTestWebChromeClientHostApi mockHostApi =
+ MockTestWebChromeClientHostApi();
+ TestWebChromeClientHostApi.setup(mockHostApi);
+
+ WebChromeClient.api =
+ WebChromeClientHostApiImpl(instanceManager: instanceManager);
+
+ final WebChromeClient clientWithNullCallback =
+ WebChromeClient.detached();
+ instanceManager.addHostCreatedInstance(clientWithNullCallback, 2);
+
+ expect(
+ () => clientWithNullCallback
+ .setSynchronousReturnValueForOnShowFileChooser(true),
+ throwsStateError,
+ );
+
+ final WebChromeClient clientWithNonnullCallback =
+ WebChromeClient.detached(
+ onShowFileChooser: (_, __) async => <String>[],
+ );
+ instanceManager.addHostCreatedInstance(clientWithNonnullCallback, 3);
+
+ clientWithNonnullCallback
+ .setSynchronousReturnValueForOnShowFileChooser(true);
+
+ verify(
+ mockHostApi.setSynchronousReturnValueForOnShowFileChooser(3, true),
+ );
+ });
+
test('copy', () {
expect(WebChromeClient.detached().copy(), isA<WebChromeClient>());
});