@@ -62,6 +62,7 @@ void main() {
6262 testWidgets ('loadUrl with headers' , (WidgetTester tester) async {
6363 final Completer <WebViewController > controllerCompleter =
6464 Completer <WebViewController >();
65+ final StreamController <String > pageStarts = StreamController <String >();
6566 final StreamController <String > pageLoads = StreamController <String >();
6667 await tester.pumpWidget (
6768 Directionality (
@@ -73,6 +74,9 @@ void main() {
7374 controllerCompleter.complete (controller);
7475 },
7576 javascriptMode: JavascriptMode .unrestricted,
77+ onPageStarted: (String url) {
78+ pageStarts.add (url);
79+ },
7680 onPageFinished: (String url) {
7781 pageLoads.add (url);
7882 },
@@ -88,7 +92,9 @@ void main() {
8892 final String currentUrl = await controller.currentUrl ();
8993 expect (currentUrl, 'https://flutter-header-echo.herokuapp.com/' );
9094
95+ await pageStarts.stream.firstWhere ((String url) => url == currentUrl);
9196 await pageLoads.stream.firstWhere ((String url) => url == currentUrl);
97+
9298 final String content = await controller
9399 .evaluateJavascript ('document.documentElement.innerText' );
94100 expect (content.contains ('flutter_test_header' ), isTrue);
@@ -97,6 +103,7 @@ void main() {
97103 testWidgets ('JavaScriptChannel' , (WidgetTester tester) async {
98104 final Completer <WebViewController > controllerCompleter =
99105 Completer <WebViewController >();
106+ final Completer <void > pageStarted = Completer <void >();
100107 final Completer <void > pageLoaded = Completer <void >();
101108 final List <String > messagesReceived = < String > [];
102109 await tester.pumpWidget (
@@ -121,13 +128,17 @@ void main() {
121128 },
122129 ),
123130 ].toSet (),
131+ onPageStarted: (String url) {
132+ pageStarted.complete (null );
133+ },
124134 onPageFinished: (String url) {
125135 pageLoaded.complete (null );
126136 },
127137 ),
128138 ),
129139 );
130140 final WebViewController controller = await controllerCompleter.future;
141+ await pageStarted.future;
131142 await pageLoaded.future;
132143
133144 expect (messagesReceived, isEmpty);
@@ -155,6 +166,7 @@ void main() {
155166 final String resizeTestBase64 =
156167 base64Encode (const Utf8Encoder ().convert (resizeTest));
157168 final Completer <void > resizeCompleter = Completer <void >();
169+ final Completer <void > pageStarted = Completer <void >();
158170 final Completer <void > pageLoaded = Completer <void >();
159171 final Completer <WebViewController > controllerCompleter =
160172 Completer <WebViewController >();
@@ -176,6 +188,9 @@ void main() {
176188 },
177189 ),
178190 ].toSet (),
191+ onPageStarted: (String url) {
192+ pageStarted.complete (null );
193+ },
179194 onPageFinished: (String url) {
180195 pageLoaded.complete (null );
181196 },
@@ -198,6 +213,7 @@ void main() {
198213 );
199214
200215 await controllerCompleter.future;
216+ await pageStarted.future;
201217 await pageLoaded.future;
202218
203219 expect (resizeCompleter.isCompleted, false );
@@ -343,6 +359,7 @@ void main() {
343359 testWidgets ('Auto media playback' , (WidgetTester tester) async {
344360 Completer <WebViewController > controllerCompleter =
345361 Completer <WebViewController >();
362+ Completer <void > pageStarted = Completer <void >();
346363 Completer <void > pageLoaded = Completer <void >();
347364
348365 await tester.pumpWidget (
@@ -355,6 +372,9 @@ void main() {
355372 controllerCompleter.complete (controller);
356373 },
357374 javascriptMode: JavascriptMode .unrestricted,
375+ onPageStarted: (String url) {
376+ pageStarted.complete (null );
377+ },
358378 onPageFinished: (String url) {
359379 pageLoaded.complete (null );
360380 },
@@ -363,12 +383,14 @@ void main() {
363383 ),
364384 );
365385 WebViewController controller = await controllerCompleter.future;
386+ await pageStarted.future;
366387 await pageLoaded.future;
367388
368389 String isPaused = await controller.evaluateJavascript ('isPaused();' );
369390 expect (isPaused, _webviewBool (false ));
370391
371392 controllerCompleter = Completer <WebViewController >();
393+ pageStarted = Completer <void >();
372394 pageLoaded = Completer <void >();
373395
374396 // We change the key to re-create a new webview as we change the initialMediaPlaybackPolicy
@@ -382,6 +404,9 @@ void main() {
382404 controllerCompleter.complete (controller);
383405 },
384406 javascriptMode: JavascriptMode .unrestricted,
407+ onPageStarted: (String url) {
408+ pageStarted.complete (null );
409+ },
385410 onPageFinished: (String url) {
386411 pageLoaded.complete (null );
387412 },
@@ -392,6 +417,7 @@ void main() {
392417 );
393418
394419 controller = await controllerCompleter.future;
420+ await pageStarted.future;
395421 await pageLoaded.future;
396422
397423 isPaused = await controller.evaluateJavascript ('isPaused();' );
@@ -402,6 +428,7 @@ void main() {
402428 (WidgetTester tester) async {
403429 final Completer <WebViewController > controllerCompleter =
404430 Completer <WebViewController >();
431+ Completer <void > pageStarted = Completer <void >();
405432 Completer <void > pageLoaded = Completer <void >();
406433
407434 final GlobalKey key = GlobalKey ();
@@ -415,6 +442,9 @@ void main() {
415442 controllerCompleter.complete (controller);
416443 },
417444 javascriptMode: JavascriptMode .unrestricted,
445+ onPageStarted: (String url) {
446+ pageStarted.complete (null );
447+ },
418448 onPageFinished: (String url) {
419449 pageLoaded.complete (null );
420450 },
@@ -423,11 +453,13 @@ void main() {
423453 ),
424454 );
425455 final WebViewController controller = await controllerCompleter.future;
456+ await pageStarted.future;
426457 await pageLoaded.future;
427458
428459 String isPaused = await controller.evaluateJavascript ('isPaused();' );
429460 expect (isPaused, _webviewBool (false ));
430461
462+ pageStarted = Completer <void >();
431463 pageLoaded = Completer <void >();
432464
433465 await tester.pumpWidget (
@@ -440,6 +472,9 @@ void main() {
440472 controllerCompleter.complete (controller);
441473 },
442474 javascriptMode: JavascriptMode .unrestricted,
475+ onPageStarted: (String url) {
476+ pageStarted.complete (null );
477+ },
443478 onPageFinished: (String url) {
444479 pageLoaded.complete (null );
445480 },
@@ -451,6 +486,7 @@ void main() {
451486
452487 await controller.reload ();
453488
489+ await pageStarted.future;
454490 await pageLoaded.future;
455491
456492 isPaused = await controller.evaluateJavascript ('isPaused();' );
@@ -469,6 +505,7 @@ void main() {
469505 ''' ;
470506 final String getTitleTestBase64 =
471507 base64Encode (const Utf8Encoder ().convert (getTitleTest));
508+ final Completer <void > pageStarted = Completer <void >();
472509 final Completer <void > pageLoaded = Completer <void >();
473510 final Completer <WebViewController > controllerCompleter =
474511 Completer <WebViewController >();
@@ -481,6 +518,9 @@ void main() {
481518 onWebViewCreated: (WebViewController controller) {
482519 controllerCompleter.complete (controller);
483520 },
521+ onPageStarted: (String url) {
522+ pageStarted.complete (null );
523+ },
484524 onPageFinished: (String url) {
485525 pageLoaded.complete (null );
486526 },
@@ -489,6 +529,7 @@ void main() {
489529 );
490530
491531 final WebViewController controller = await controllerCompleter.future;
532+ await pageStarted.future;
492533 await pageLoaded.future;
493534
494535 final String title = await controller.getTitle ();
0 commit comments