@@ -682,8 +682,7 @@ Future<void> main() async {
682682 '${base64Encode (const Utf8Encoder ().convert (blankPage ))}' ;
683683
684684 testWidgets ('can allow requests' , (WidgetTester tester) async {
685- final StreamController <String > pageLoads =
686- StreamController <String >.broadcast ();
685+ Completer <void > pageLoaded = Completer <void >();
687686
688687 final PlatformWebViewController controller = PlatformWebViewController (
689688 const PlatformWebViewControllerCreationParams (),
@@ -693,7 +692,7 @@ Future<void> main() async {
693692 PlatformNavigationDelegate (
694693 const PlatformNavigationDelegateCreationParams (),
695694 )
696- ..setOnPageFinished ((String url ) => pageLoads. add (url ))
695+ ..setOnPageFinished ((_ ) => pageLoaded. complete ( ))
697696 ..setOnNavigationRequest ((NavigationRequest navigationRequest) {
698697 return (navigationRequest.url.contains ('youtube.com' ))
699698 ? NavigationDecision .prevent
@@ -712,10 +711,12 @@ Future<void> main() async {
712711 },
713712 ));
714713
715- await pageLoads.stream.first; // Wait for initial page load.
714+ await pageLoaded.future; // Wait for initial page load.
715+
716+ pageLoaded = Completer <void >();
716717 await controller.runJavaScript ('location.href = "$secondaryUrl "' );
718+ await pageLoaded.future; // Wait for the next page load.
717719
718- await pageLoads.stream.first; // Wait for the next page load.
719720 final String ? currentUrl = await controller.currentUrl ();
720721 expect (currentUrl, secondaryUrl);
721722 });
@@ -799,8 +800,7 @@ Future<void> main() async {
799800 });
800801
801802 testWidgets ('can block requests' , (WidgetTester tester) async {
802- final StreamController <String > pageLoads =
803- StreamController <String >.broadcast ();
803+ Completer <void > pageLoaded = Completer <void >();
804804
805805 final PlatformWebViewController controller = PlatformWebViewController (
806806 const PlatformWebViewControllerCreationParams (),
@@ -810,7 +810,7 @@ Future<void> main() async {
810810 PlatformNavigationDelegate (
811811 const PlatformNavigationDelegateCreationParams (),
812812 )
813- ..setOnPageFinished ((String url ) => pageLoads. add (url ))
813+ ..setOnPageFinished ((_ ) => pageLoaded. complete ( ))
814814 ..setOnNavigationRequest ((NavigationRequest navigationRequest) {
815815 return (navigationRequest.url.contains ('youtube.com' ))
816816 ? NavigationDecision .prevent
@@ -827,22 +827,23 @@ Future<void> main() async {
827827 },
828828 ));
829829
830- await pageLoads.stream.first; // Wait for initial page load.
830+ await pageLoaded.future; // Wait for initial page load.
831+
832+ pageLoaded = Completer <void >();
831833 await controller
832834 .runJavaScript ('location.href = "https://www.youtube.com/"' );
833835
834836 // There should never be any second page load, since our new URL is
835837 // blocked. Still wait for a potential page change for some time in order
836838 // to give the test a chance to fail.
837- await pageLoads.stream.first
838- .timeout (const Duration (milliseconds: 500 ), onTimeout: () => '' );
839+ await pageLoaded.future
840+ .timeout (const Duration (milliseconds: 500 ), onTimeout: () => false );
839841 final String ? currentUrl = await controller.currentUrl ();
840842 expect (currentUrl, isNot (contains ('youtube.com' )));
841843 });
842844
843845 testWidgets ('supports asynchronous decisions' , (WidgetTester tester) async {
844- final StreamController <String > pageLoads =
845- StreamController <String >.broadcast ();
846+ Completer <void > pageLoaded = Completer <void >();
846847
847848 final PlatformWebViewController controller = PlatformWebViewController (
848849 const PlatformWebViewControllerCreationParams (),
@@ -852,7 +853,7 @@ Future<void> main() async {
852853 PlatformNavigationDelegate (
853854 const PlatformNavigationDelegateCreationParams (),
854855 )
855- ..setOnPageFinished ((String url ) => pageLoads. add (url ))
856+ ..setOnPageFinished ((_ ) => pageLoaded. complete ( ))
856857 ..setOnNavigationRequest (
857858 (NavigationRequest navigationRequest) async {
858859 NavigationDecision decision = NavigationDecision .prevent;
@@ -872,10 +873,12 @@ Future<void> main() async {
872873 },
873874 ));
874875
875- await pageLoads.stream.first; // Wait for initial page load.
876+ await pageLoaded.future; // Wait for initial page load.
877+
878+ pageLoaded = Completer <void >();
876879 await controller.runJavaScript ('location.href = "$secondaryUrl "' );
880+ await pageLoaded.future; // Wait for second page to load.
877881
878- await pageLoads.stream.first; // Wait for second page to load.
879882 final String ? currentUrl = await controller.currentUrl ();
880883 expect (currentUrl, secondaryUrl);
881884 });
0 commit comments