[webview_flutter_android][webview_flutter_wkwebview] Fixes unawaited_futures violations (#4354)
For https://github.com/flutter/flutter/issues/127323
diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index 10489c3..114f2a7 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.8.2
+
+* Fixes unawaited_futures violations.
+
## 3.8.1
* Bumps androidx.webkit:webkit from 1.6.0 to 1.7.0.
diff --git a/packages/webview_flutter/webview_flutter_android/analysis_options.yaml b/packages/webview_flutter/webview_flutter_android/analysis_options.yaml
deleted file mode 100644
index 7c19fab..0000000
--- a/packages/webview_flutter/webview_flutter_android/analysis_options.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-# TODO(stuartmorgan): Remove this file and fix all the unawaited_futures
-# violations. See https://github.com/flutter/flutter/issues/127323
-
-include: ../../../analysis_options.yaml
-
-linter:
- rules:
- unawaited_futures: false
diff --git a/packages/webview_flutter/webview_flutter_android/example/integration_test/legacy/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_android/example/integration_test/legacy/webview_flutter_test.dart
index 852ed0f..b4b2817 100644
--- a/packages/webview_flutter/webview_flutter_android/example/integration_test/legacy/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/integration_test/legacy/webview_flutter_test.dart
@@ -29,7 +29,7 @@
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
final HttpServer server = await HttpServer.bind(InternetAddress.anyIPv4, 0);
- server.forEach((HttpRequest request) {
+ unawaited(server.forEach((HttpRequest request) {
if (request.uri.path == '/hello.txt') {
request.response.writeln('Hello, world.');
} else if (request.uri.path == '/secondary.txt') {
@@ -42,7 +42,7 @@
fail('unexpected request: ${request.method} ${request.uri}');
}
request.response.close();
- });
+ }));
final String prefixUrl = 'http://${server.address.address}:${server.port}';
final String primaryUrl = '$prefixUrl/hello.txt';
final String secondaryUrl = '$prefixUrl/secondary.txt';
diff --git a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
index 17e0406..462027e 100644
--- a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
@@ -26,7 +26,7 @@
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
final HttpServer server = await HttpServer.bind(InternetAddress.anyIPv4, 0);
- server.forEach((HttpRequest request) {
+ unawaited(server.forEach((HttpRequest request) {
if (request.uri.path == '/hello.txt') {
request.response.writeln('Hello, world.');
} else if (request.uri.path == '/secondary.txt') {
@@ -39,7 +39,7 @@
fail('unexpected request: ${request.method} ${request.uri}');
}
request.response.close();
- });
+ }));
final String prefixUrl = 'http://${server.address.address}:${server.port}';
final String primaryUrl = '$prefixUrl/hello.txt';
final String secondaryUrl = '$prefixUrl/secondary.txt';
@@ -50,13 +50,15 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageFinished.complete()),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(uri: Uri.parse(primaryUrl)),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -117,9 +119,8 @@
android.WebView.api = WebViewHostApiImpl(
instanceManager: instanceManager,
);
- android.WebSettings.api = WebSettingsHostApiImpl(
- instanceManager: instanceManager,
- );
+ android.WebSettings.api =
+ WebSettingsHostApiImpl(instanceManager: instanceManager);
android.WebChromeClient.api = WebChromeClientHostApiImpl(
instanceManager: instanceManager,
);
@@ -177,14 +178,14 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageFinished.complete()),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -211,19 +212,19 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((String url) => pageLoads.add(url)),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(headersUrl),
- headers: headers,
- ),
- );
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((String url) => pageLoads.add(url)));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(headersUrl),
+ headers: headers,
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -243,15 +244,16 @@
testWidgets('JavascriptChannel', (WidgetTester tester) async {
final Completer<void> pageFinished = Completer<void>();
+
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageFinished.complete()),
- );
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
final Completer<String> channelCompleter = Completer<String>();
await controller.addJavaScriptChannel(
@@ -318,15 +320,17 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageFinished.complete()),
- )
- ..setUserAgent('Custom_User_Agent1')
- ..loadRequest(LoadRequestParams(uri: Uri.parse('about:blank')));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ unawaited(controller.setUserAgent('Custom_User_Agent1'));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse('about:blank')));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -385,23 +389,24 @@
testWidgets('Auto media playback', (WidgetTester tester) async {
Completer<void> pageLoaded = Completer<void>();
- PlatformWebViewController controller = AndroidWebViewController(
+ AndroidWebViewController controller = AndroidWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- AndroidNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..setMediaPlaybackRequiresUserGesture(false)
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$videoTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ unawaited(controller.setMediaPlaybackRequiresUserGesture(false));
+ AndroidNavigationDelegate delegate = AndroidNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$videoTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -418,22 +423,23 @@
expect(isPaused, false);
pageLoaded = Completer<void>();
- controller = PlatformWebViewController(
+ controller = AndroidWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$videoTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ delegate = AndroidNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$videoTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -454,35 +460,37 @@
final Completer<void> pageLoaded = Completer<void>();
final Completer<void> videoPlaying = Completer<void>();
- final PlatformWebViewController controller = AndroidWebViewController(
+ final AndroidWebViewController controller = AndroidWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- AndroidNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..addJavaScriptChannel(
- JavaScriptChannelParams(
- name: 'VideoTestTime',
- onMessageReceived: (JavaScriptMessage message) {
- final double currentTime = double.parse(message.message);
- // Let it play for at least 1 second to make sure the related video's properties are set.
- if (currentTime > 1 && !videoPlaying.isCompleted) {
- videoPlaying.complete(null);
- }
- },
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ unawaited(controller.setMediaPlaybackRequiresUserGesture(false));
+ final AndroidNavigationDelegate delegate = AndroidNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ unawaited(controller.addJavaScriptChannel(
+ JavaScriptChannelParams(
+ name: 'VideoTestTime',
+ onMessageReceived: (JavaScriptMessage message) {
+ final double currentTime = double.parse(message.message);
+ // Let it play for at least 1 second to make sure the related video's properties are set.
+ if (currentTime > 1 && !videoPlaying.isCompleted) {
+ videoPlaying.complete(null);
+ }
+ },
+ ),
+ ));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$videoTestBase64',
),
- )
- ..setMediaPlaybackRequiresUserGesture(false)
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$videoTestBase64',
- ),
- ),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -537,23 +545,24 @@
testWidgets('Auto media playback', (WidgetTester tester) async {
Completer<void> pageLoaded = Completer<void>();
- PlatformWebViewController controller = AndroidWebViewController(
+ AndroidWebViewController controller = AndroidWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- AndroidNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..setMediaPlaybackRequiresUserGesture(false)
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$audioTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ unawaited(controller.setMediaPlaybackRequiresUserGesture(false));
+ AndroidNavigationDelegate delegate = AndroidNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$audioTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -570,22 +579,22 @@
expect(isPaused, false);
pageLoaded = Completer<void>();
- controller = PlatformWebViewController(
+ controller = AndroidWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$audioTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ delegate = AndroidNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$audioTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -618,20 +627,21 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$getTitleTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$getTitleTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -682,20 +692,21 @@
final Completer<void> pageLoaded = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$scrollTestPageBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$scrollTestPageBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -743,22 +754,24 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageLoaded.complete())
- ..setOnNavigationRequest((NavigationRequest navigationRequest) {
- return (navigationRequest.url.contains('youtube.com'))
- ? NavigationDecision.prevent
- : NavigationDecision.navigate;
- }),
- )
- ..loadRequest(
- LoadRequestParams(uri: Uri.parse(blankPageEncoded)),
- );
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(
+ delegate.setOnNavigationRequest((NavigationRequest navigationRequest) {
+ return (navigationRequest.url.contains('youtube.com'))
+ ? NavigationDecision.prevent
+ : NavigationDecision.navigate;
+ }),
+ );
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(uri: Uri.parse(blankPageEncoded)),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -784,18 +797,21 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnWebResourceError((WebResourceError error) {
- errorCompleter.complete(error);
- }),
- )
- ..loadRequest(
- LoadRequestParams(uri: Uri.parse('https://www.notawebsite..com')),
- );
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(
+ delegate.setOnWebResourceError((WebResourceError error) {
+ errorCompleter.complete(error);
+ }),
+ );
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(uri: Uri.parse('https://www.notawebsite..com')),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -825,24 +841,27 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageFinishCompleter.complete())
- ..setOnWebResourceError((WebResourceError error) {
- errorCompleter.complete(error);
- }),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(
+ delegate.setOnPageFinished((_) => pageFinishCompleter.complete()),
+ );
+ unawaited(
+ delegate.setOnWebResourceError((WebResourceError error) {
+ errorCompleter.complete(error);
+ }),
+ );
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -861,20 +880,22 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageLoaded.complete())
- ..setOnNavigationRequest((NavigationRequest navigationRequest) {
- return (navigationRequest.url.contains('youtube.com'))
- ? NavigationDecision.prevent
- : NavigationDecision.navigate;
- }),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(delegate
+ .setOnNavigationRequest((NavigationRequest navigationRequest) {
+ return (navigationRequest.url.contains('youtube.com'))
+ ? NavigationDecision.prevent
+ : NavigationDecision.navigate;
+ }));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -904,23 +925,23 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageLoaded.complete())
- ..setOnNavigationRequest(
- (NavigationRequest navigationRequest) async {
- NavigationDecision decision = NavigationDecision.prevent;
- decision = await Future<NavigationDecision>.delayed(
- const Duration(milliseconds: 10),
- () => NavigationDecision.navigate);
- return decision;
- }),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(delegate
+ .setOnNavigationRequest((NavigationRequest navigationRequest) async {
+ NavigationDecision decision = NavigationDecision.prevent;
+ decision = await Future<NavigationDecision>.delayed(
+ const Duration(milliseconds: 10),
+ () => NavigationDecision.navigate);
+ return decision;
+ }));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -943,17 +964,17 @@
testWidgets('can receive url changes', (WidgetTester tester) async {
final Completer<void> pageLoaded = Completer<void>();
- final PlatformNavigationDelegate navigationDelegate =
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete());
-
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(navigationDelegate)
- ..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -964,10 +985,10 @@
));
await pageLoaded.future;
- await navigationDelegate.setOnPageFinished((_) {});
+ await delegate.setOnPageFinished((_) {});
final Completer<String> urlChangeCompleter = Completer<String>();
- await navigationDelegate.setOnUrlChange((UrlChange change) {
+ await delegate.setOnUrlChange((UrlChange change) {
urlChangeCompleter.complete(change.url);
});
@@ -980,17 +1001,17 @@
(WidgetTester tester) async {
final Completer<void> pageLoaded = Completer<void>();
- final PlatformNavigationDelegate navigationDelegate =
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete());
-
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(navigationDelegate)
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1001,10 +1022,10 @@
));
await pageLoaded.future;
- await navigationDelegate.setOnPageFinished((_) {});
+ await delegate.setOnPageFinished((_) {});
final Completer<String> urlChangeCompleter = Completer<String>();
- await navigationDelegate.setOnUrlChange((UrlChange change) {
+ await delegate.setOnUrlChange((UrlChange change) {
urlChangeCompleter.complete(change.url);
});
@@ -1022,11 +1043,13 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1049,12 +1072,15 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()))
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1118,18 +1144,21 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoadCompleter.complete()))
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$openWindowTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(
+ delegate.setOnPageFinished((_) => pageLoadCompleter.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$openWindowTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1159,11 +1188,14 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setPlatformNavigationDelegate(PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()))
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
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 151cc81..6a4c918 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
@@ -120,10 +120,10 @@
final GeolocationPermissionsResponse response = await onShowPrompt(
GeolocationPermissionsRequestParams(origin: origin),
);
- callback.invoke(origin, response.allow, response.retain);
+ return callback.invoke(origin, response.allow, response.retain);
} else {
// default don't allow
- callback.invoke(origin, false, false);
+ return callback.invoke(origin, false, false);
}
};
}),
@@ -338,9 +338,11 @@
Future<void> setPlatformNavigationDelegate(
covariant AndroidNavigationDelegate handler) async {
_currentNavigationDelegate = handler;
- handler.setOnLoadRequest(loadRequest);
- _webView.setWebViewClient(handler.androidWebViewClient);
- _webView.setDownloadListener(handler.androidDownloadListener);
+ await Future.wait(<Future<void>>[
+ handler.setOnLoadRequest(loadRequest),
+ _webView.setWebViewClient(handler.androidWebViewClient),
+ _webView.setDownloadListener(handler.androidDownloadListener),
+ ]);
}
@override
@@ -1103,7 +1105,8 @@
NavigationRequestCallback onNavigationRequest,
) async {
_onNavigationRequest = onNavigationRequest;
- _webViewClient.setSynchronousReturnValueForShouldOverrideUrlLoading(true);
+ return _webViewClient
+ .setSynchronousReturnValueForShouldOverrideUrlLoading(true);
}
@override
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index 609fa7a..a58c031 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/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: 3.8.1
+version: 3.8.2
environment:
sdk: ">=2.18.0 <4.0.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 d8527ca..a6905c7 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
@@ -608,7 +608,7 @@
mockWebChromeClient.setSynchronousReturnValueForOnShowFileChooser(true),
);
- onShowFileChooserCallback(
+ await onShowFileChooserCallback(
android_webview.WebView.detached(),
android_webview.FileChooserParams.detached(
isCaptureEnabled: false,
@@ -670,7 +670,7 @@
bool isAllow = false;
late final GeolocationPermissionsResponse response;
- controller.setGeolocationPermissionsPromptCallbacks(
+ await controller.setGeolocationPermissionsPromptCallbacks(
onShowPrompt: (GeolocationPermissionsRequestParams request) async {
isAllow = request.origin == allowOrigin;
response =
@@ -720,7 +720,7 @@
await controller.setOnPlatformPermissionRequest(
(PlatformWebViewPermissionRequest request) async {
permissionRequest = request;
- request.grant();
+ await request.grant();
},
);
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
index 29b791d..59f6f3d 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.6.2
+
+* Fixes unawaited_futures violations.
+
## 3.6.1
* Fixes bug where a native `NSURL` could be removed from an `InstanceManager` if it is equal to an
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/analysis_options.yaml b/packages/webview_flutter/webview_flutter_wkwebview/analysis_options.yaml
deleted file mode 100644
index 7c19fab..0000000
--- a/packages/webview_flutter/webview_flutter_wkwebview/analysis_options.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-# TODO(stuartmorgan): Remove this file and fix all the unawaited_futures
-# violations. See https://github.com/flutter/flutter/issues/127323
-
-include: ../../../analysis_options.yaml
-
-linter:
- rules:
- unawaited_futures: false
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart
index d9e6fb9..9626084 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart
@@ -26,7 +26,7 @@
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
final HttpServer server = await HttpServer.bind(InternetAddress.anyIPv4, 0);
- server.forEach((HttpRequest request) {
+ unawaited(server.forEach((HttpRequest request) {
if (request.uri.path == '/hello.txt') {
request.response.writeln('Hello, world.');
} else if (request.uri.path == '/secondary.txt') {
@@ -39,7 +39,7 @@
fail('unexpected request: ${request.method} ${request.uri}');
}
request.response.close();
- });
+ }));
final String prefixUrl = 'http://${server.address.address}:${server.port}';
final String primaryUrl = '$prefixUrl/hello.txt';
final String secondaryUrl = '$prefixUrl/secondary.txt';
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
index 9318d9c..4b457d0 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
@@ -25,7 +25,7 @@
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
final HttpServer server = await HttpServer.bind(InternetAddress.anyIPv4, 0);
- server.forEach((HttpRequest request) {
+ unawaited(server.forEach((HttpRequest request) {
if (request.uri.path == '/hello.txt') {
request.response.writeln('Hello, world.');
} else if (request.uri.path == '/secondary.txt') {
@@ -38,7 +38,7 @@
fail('unexpected request: ${request.method} ${request.uri}');
}
request.response.close();
- });
+ }));
final String prefixUrl = 'http://${server.address.address}:${server.port}';
final String primaryUrl = '$prefixUrl/hello.txt';
final String secondaryUrl = '$prefixUrl/secondary.txt';
@@ -117,13 +117,15 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageFinished.complete()),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(uri: Uri.parse(primaryUrl)),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -144,14 +146,14 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageFinished.complete()),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -178,19 +180,19 @@
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((String url) => pageLoads.add(url)),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(headersUrl),
- headers: headers,
- ),
- );
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((String url) => pageLoads.add(url)));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(headersUrl),
+ headers: headers,
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -212,13 +214,13 @@
final Completer<void> pageFinished = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageFinished.complete()),
- );
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
final Completer<String> channelCompleter = Completer<String>();
await controller.addJavaScriptChannel(
@@ -230,7 +232,7 @@
),
);
- controller.loadHtmlString(
+ await controller.loadHtmlString(
'data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+',
);
@@ -275,9 +277,9 @@
testWidgets('set custom userAgent', (WidgetTester tester) async {
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setUserAgent('Custom_User_Agent1');
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ unawaited(controller.setUserAgent('Custom_User_Agent1'));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -334,24 +336,25 @@
testWidgets('Auto media playback', (WidgetTester tester) async {
Completer<void> pageLoaded = Completer<void>();
- PlatformWebViewController controller = PlatformWebViewController(
+ WebKitWebViewController controller = WebKitWebViewController(
WebKitWebViewControllerCreationParams(
mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$videoTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ WebKitNavigationDelegate delegate = WebKitNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$videoTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -368,22 +371,23 @@
expect(isPaused, false);
pageLoaded = Completer<void>();
- controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$videoTestBase64',
- ),
+ controller = WebKitWebViewController(
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ delegate = WebKitNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$videoTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -410,32 +414,34 @@
mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
allowsInlineMediaPlayback: true,
),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..addJavaScriptChannel(
- JavaScriptChannelParams(
- name: 'VideoTestTime',
- onMessageReceived: (JavaScriptMessage message) {
- final double currentTime = double.parse(message.message);
- // Let it play for at least 1 second to make sure the related video's properties are set.
- if (currentTime > 1 && !videoPlaying.isCompleted) {
- videoPlaying.complete(null);
- }
- },
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final WebKitNavigationDelegate delegate = WebKitNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ unawaited(controller.addJavaScriptChannel(
+ JavaScriptChannelParams(
+ name: 'VideoTestTime',
+ onMessageReceived: (JavaScriptMessage message) {
+ final double currentTime = double.parse(message.message);
+ // Let it play for at least 1 second to make sure the related video's properties are set.
+ if (currentTime > 1 && !videoPlaying.isCompleted) {
+ videoPlaying.complete(null);
+ }
+ },
+ ),
+ ));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$videoTestBase64',
),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$videoTestBase64',
- ),
- ),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -466,32 +472,34 @@
WebKitWebViewControllerCreationParams(
mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..addJavaScriptChannel(
- JavaScriptChannelParams(
- name: 'VideoTestTime',
- onMessageReceived: (JavaScriptMessage message) {
- final double currentTime = double.parse(message.message);
- // Let it play for at least 1 second to make sure the related video's properties are set.
- if (currentTime > 1 && !videoPlaying.isCompleted) {
- videoPlaying.complete(null);
- }
- },
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final WebKitNavigationDelegate delegate = WebKitNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ unawaited(controller.addJavaScriptChannel(
+ JavaScriptChannelParams(
+ name: 'VideoTestTime',
+ onMessageReceived: (JavaScriptMessage message) {
+ final double currentTime = double.parse(message.message);
+ // Let it play for at least 1 second to make sure the related video's properties are set.
+ if (currentTime > 1 && !videoPlaying.isCompleted) {
+ videoPlaying.complete(null);
+ }
+ },
+ ),
+ ));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$videoTestBase64',
),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$videoTestBase64',
- ),
- ),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -551,20 +559,21 @@
WebKitWebViewControllerCreationParams(
mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$audioTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ WebKitNavigationDelegate delegate = WebKitNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$audioTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -583,20 +592,20 @@
pageLoaded = Completer<void>();
controller = PlatformWebViewController(
WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$audioTestBase64',
- ),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ delegate = WebKitNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$audioTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -628,21 +637,22 @@
final Completer<void> pageLoaded = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$getTitleTestBase64',
- ),
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$getTitleTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -692,21 +702,22 @@
final Completer<void> pageLoaded = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$scrollTestPageBase64',
- ),
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$scrollTestPageBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -753,23 +764,25 @@
Completer<void> pageLoaded = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageLoaded.complete())
- ..setOnNavigationRequest((NavigationRequest navigationRequest) {
- return (navigationRequest.url.contains('youtube.com'))
- ? NavigationDecision.prevent
- : NavigationDecision.navigate;
- }),
- )
- ..loadRequest(
- LoadRequestParams(uri: Uri.parse(blankPageEncoded)),
- );
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(
+ delegate.setOnNavigationRequest((NavigationRequest navigationRequest) {
+ return (navigationRequest.url.contains('youtube.com'))
+ ? NavigationDecision.prevent
+ : NavigationDecision.navigate;
+ }),
+ );
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(uri: Uri.parse(blankPageEncoded)),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -794,19 +807,22 @@
Completer<WebResourceError>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnWebResourceError((WebResourceError error) {
- errorCompleter.complete(error);
- }),
- )
- ..loadRequest(
- LoadRequestParams(uri: Uri.parse('https://www.notawebsite..com')),
- );
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(
+ delegate.setOnWebResourceError((WebResourceError error) {
+ errorCompleter.complete(error);
+ }),
+ );
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller.loadRequest(
+ LoadRequestParams(uri: Uri.parse('https://www.notawebsite..com')),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -829,25 +845,28 @@
final Completer<void> pageFinishCompleter = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageFinishCompleter.complete())
- ..setOnWebResourceError((WebResourceError error) {
- errorCompleter.complete(error);
- }),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+',
- ),
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(
+ delegate.setOnPageFinished((_) => pageFinishCompleter.complete()),
+ );
+ unawaited(
+ delegate.setOnWebResourceError((WebResourceError error) {
+ errorCompleter.complete(error);
+ }),
+ );
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -883,25 +902,28 @@
final Completer<void> pageFinishCompleter = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageFinishCompleter.complete())
- ..setOnWebResourceError((WebResourceError error) {
- errorCompleter.complete(error);
- }),
- )
- ..loadRequest(
- LoadRequestParams(
- uri: Uri.parse(
- 'data:text/html;charset=utf-8;base64,$iframeTestBase64',
- ),
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(
+ delegate.setOnPageFinished((_) => pageFinishCompleter.complete()),
+ );
+ unawaited(
+ delegate.setOnWebResourceError((WebResourceError error) {
+ errorCompleter.complete(error);
+ }),
+ );
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller.loadRequest(
+ LoadRequestParams(
+ uri: Uri.parse(
+ 'data:text/html;charset=utf-8;base64,$iframeTestBase64',
),
- );
+ ),
+ );
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -920,21 +942,23 @@
Completer<void> pageLoaded = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageLoaded.complete())
- ..setOnNavigationRequest((NavigationRequest navigationRequest) {
- return (navigationRequest.url.contains('youtube.com'))
- ? NavigationDecision.prevent
- : NavigationDecision.navigate;
- }),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(delegate
+ .setOnNavigationRequest((NavigationRequest navigationRequest) {
+ return (navigationRequest.url.contains('youtube.com'))
+ ? NavigationDecision.prevent
+ : NavigationDecision.navigate;
+ }));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -963,24 +987,24 @@
Completer<void> pageLoaded = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(
- WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )
- ..setOnPageFinished((_) => pageLoaded.complete())
- ..setOnNavigationRequest(
- (NavigationRequest navigationRequest) async {
- NavigationDecision decision = NavigationDecision.prevent;
- decision = await Future<NavigationDecision>.delayed(
- const Duration(milliseconds: 10),
- () => NavigationDecision.navigate);
- return decision;
- }),
- )
- ..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(delegate
+ .setOnNavigationRequest((NavigationRequest navigationRequest) async {
+ NavigationDecision decision = NavigationDecision.prevent;
+ decision = await Future<NavigationDecision>.delayed(
+ const Duration(milliseconds: 10),
+ () => NavigationDecision.navigate);
+ return decision;
+ }));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1003,17 +1027,17 @@
testWidgets('can receive url changes', (WidgetTester tester) async {
final Completer<void> pageLoaded = Completer<void>();
- final PlatformNavigationDelegate navigationDelegate =
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete());
-
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(navigationDelegate)
- ..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1024,10 +1048,10 @@
));
await pageLoaded.future;
- await navigationDelegate.setOnPageFinished((_) {});
+ await delegate.setOnPageFinished((_) {});
final Completer<String> urlChangeCompleter = Completer<String>();
- await navigationDelegate.setOnUrlChange((UrlChange change) {
+ await delegate.setOnUrlChange((UrlChange change) {
urlChangeCompleter.complete(change.url);
});
@@ -1040,17 +1064,17 @@
(WidgetTester tester) async {
final Completer<void> pageLoaded = Completer<void>();
- final PlatformNavigationDelegate navigationDelegate =
- PlatformNavigationDelegate(
- const PlatformNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete());
-
final PlatformWebViewController controller = PlatformWebViewController(
const PlatformWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(navigationDelegate)
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1061,10 +1085,10 @@
));
await pageLoaded.future;
- await navigationDelegate.setOnPageFinished((_) {});
+ await delegate.setOnPageFinished((_) {});
final Completer<String> urlChangeCompleter = Completer<String>();
- await navigationDelegate.setOnUrlChange((UrlChange change) {
+ await delegate.setOnUrlChange((UrlChange change) {
urlChangeCompleter.complete(change.url);
});
@@ -1080,9 +1104,9 @@
(WidgetTester tester) async {
final WebKitWebViewController controller = WebKitWebViewController(
WebKitWebViewControllerCreationParams(),
- )
- ..setAllowsBackForwardNavigationGestures(true)
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ );
+ unawaited(controller.setAllowsBackForwardNavigationGestures(true));
+ await controller.loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
@@ -1102,11 +1126,13 @@
final PlatformWebViewController controller = PlatformWebViewController(
WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()));
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
await controller.runJavaScript('window.open("$primaryUrl", "_blank")');
@@ -1129,13 +1155,16 @@
Completer<void> pageLoaded = Completer<void>();
final PlatformWebViewController controller = PlatformWebViewController(
- WebKitWebViewControllerCreationParams(),
- )
- ..setJavaScriptMode(JavaScriptMode.unrestricted)
- ..setPlatformNavigationDelegate(WebKitNavigationDelegate(
- const WebKitNavigationDelegateCreationParams(),
- )..setOnPageFinished((_) => pageLoaded.complete()))
- ..loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
+ const PlatformWebViewControllerCreationParams(),
+ );
+ unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
+ const PlatformNavigationDelegateCreationParams(),
+ );
+ unawaited(delegate.setOnPageFinished((_) => pageLoaded.complete()));
+ unawaited(controller.setPlatformNavigationDelegate(delegate));
+ await controller
+ .loadRequest(LoadRequestParams(uri: Uri.parse(primaryUrl)));
await tester.pumpWidget(Builder(
builder: (BuildContext context) {
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart
index 2c201be..da0745a 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart
@@ -214,24 +214,24 @@
),
);
- webView.setUIDelegate(uiDelegate);
+ unawaited(webView.setUIDelegate(uiDelegate));
await addJavascriptChannels(params.javascriptChannelNames);
- webView.setNavigationDelegate(navigationDelegate);
+ unawaited(webView.setNavigationDelegate(navigationDelegate));
if (params.userAgent != null) {
- webView.setCustomUserAgent(params.userAgent);
+ unawaited(webView.setCustomUserAgent(params.userAgent));
}
if (params.webSettings != null) {
- updateSettings(params.webSettings!);
+ unawaited(updateSettings(params.webSettings!));
}
if (params.backgroundColor != null) {
- webView.setOpaque(false);
- webView.setBackgroundColor(Colors.transparent);
- webView.scrollView.setBackgroundColor(params.backgroundColor);
+ unawaited(webView.setOpaque(false));
+ unawaited(webView.setBackgroundColor(Colors.transparent));
+ unawaited(webView.scrollView.setBackgroundColor(params.backgroundColor));
}
if (params.initialUrl != null) {
@@ -379,8 +379,8 @@
Future<String?> currentUrl() => webView.getUrl();
@override
- Future<void> scrollTo(int x, int y) async {
- webView.scrollView.setContentOffset(Point<double>(
+ Future<void> scrollTo(int x, int y) {
+ return webView.scrollView.setContentOffset(Point<double>(
x.toDouble(),
y.toDouble(),
));
@@ -550,7 +550,9 @@
Future<void> _resetUserScripts({
Set<String> removedJavaScriptChannels = const <String>{},
}) async {
- webView.configuration.userContentController.removeAllUserScripts();
+ unawaited(
+ webView.configuration.userContentController.removeAllUserScripts(),
+ );
// TODO(bparrishMines): This can be replaced with
// `removeAllScriptMessageHandlers` once Dart supports runtime version
// checking. (e.g. The equivalent to @availability in Objective-C.)
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart
index 3d6a99b..5df538c 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart
@@ -518,7 +518,9 @@
// workaround could interfere with exposing support for custom scripts from
// applications.
Future<void> _resetUserScripts({String? removedJavaScriptChannel}) async {
- _webView.configuration.userContentController.removeAllUserScripts();
+ unawaited(
+ _webView.configuration.userContentController.removeAllUserScripts(),
+ );
// TODO(bparrishMines): This can be replaced with
// `removeAllScriptMessageHandlers` once Dart supports runtime version
// checking. (e.g. The equivalent to @availability in Objective-C.)
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
index 2572ecc..166ab4a 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
@@ -2,7 +2,7 @@
description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control.
repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 3.6.1
+version: 3.6.2
environment:
sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart
index ac266ff..856ca55 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart
@@ -346,7 +346,8 @@
instanceManager: instanceManager,
);
- userContentController.addScriptMessageHandler(handler, 'handlerName');
+ await userContentController.addScriptMessageHandler(
+ handler, 'handlerName');
verify(mockPlatformHostApi.addScriptMessageHandler(
instanceManager.getIdentifier(userContentController),
instanceManager.getIdentifier(handler),
@@ -355,7 +356,7 @@
});
test('removeScriptMessageHandler', () async {
- userContentController.removeScriptMessageHandler('handlerName');
+ await userContentController.removeScriptMessageHandler('handlerName');
verify(mockPlatformHostApi.removeScriptMessageHandler(
instanceManager.getIdentifier(userContentController),
'handlerName',
@@ -363,7 +364,7 @@
});
test('removeAllScriptMessageHandlers', () async {
- userContentController.removeAllScriptMessageHandlers();
+ await userContentController.removeAllScriptMessageHandlers();
verify(mockPlatformHostApi.removeAllScriptMessageHandlers(
instanceManager.getIdentifier(userContentController),
));
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart
index 5cea3b1..89df634 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart
@@ -608,7 +608,7 @@
mockScrollView: mockScrollView,
);
- controller.setBackgroundColor(Colors.red);
+ await controller.setBackgroundColor(Colors.red);
// UIScrollView.setBackgroundColor must be called last.
verifyInOrder(<Object>[
@@ -894,7 +894,7 @@
);
late final int callbackProgress;
- navigationDelegate.setOnProgress(
+ await navigationDelegate.setOnProgress(
(int progress) => callbackProgress = progress,
);
@@ -1031,7 +1031,7 @@
);
final Completer<UrlChange> urlChangeCompleter = Completer<UrlChange>();
- navigationDelegate.setOnUrlChange(
+ await navigationDelegate.setOnUrlChange(
(UrlChange change) => urlChangeCompleter.complete(change),
);
@@ -1085,7 +1085,7 @@
);
final Completer<UrlChange> urlChangeCompleter = Completer<UrlChange>();
- navigationDelegate.setOnUrlChange(
+ await navigationDelegate.setOnUrlChange(
(UrlChange change) => urlChangeCompleter.complete(change),
);
@@ -1127,7 +1127,7 @@
await controller.setOnPlatformPermissionRequest(
(PlatformWebViewPermissionRequest request) async {
permissionRequest = request;
- request.grant();
+ await request.grant();
},
);