@@ -682,8 +682,7 @@ Future<void> main() async {
682
682
'${base64Encode (const Utf8Encoder ().convert (blankPage ))}' ;
683
683
684
684
testWidgets ('can allow requests' , (WidgetTester tester) async {
685
- final StreamController <String > pageLoads =
686
- StreamController <String >.broadcast ();
685
+ Completer <void > pageLoaded = Completer <void >();
687
686
688
687
final PlatformWebViewController controller = PlatformWebViewController (
689
688
const PlatformWebViewControllerCreationParams (),
@@ -693,7 +692,7 @@ Future<void> main() async {
693
692
PlatformNavigationDelegate (
694
693
const PlatformNavigationDelegateCreationParams (),
695
694
)
696
- ..setOnPageFinished ((String url ) => pageLoads. add (url ))
695
+ ..setOnPageFinished ((_ ) => pageLoaded. complete ( ))
697
696
..setOnNavigationRequest ((NavigationRequest navigationRequest) {
698
697
return (navigationRequest.url.contains ('youtube.com' ))
699
698
? NavigationDecision .prevent
@@ -712,10 +711,12 @@ Future<void> main() async {
712
711
},
713
712
));
714
713
715
- await pageLoads.stream.first; // Wait for initial page load.
714
+ await pageLoaded.future; // Wait for initial page load.
715
+
716
+ pageLoaded = Completer <void >();
716
717
await controller.runJavaScript ('location.href = "$secondaryUrl "' );
718
+ await pageLoaded.future; // Wait for the next page load.
717
719
718
- await pageLoads.stream.first; // Wait for the next page load.
719
720
final String ? currentUrl = await controller.currentUrl ();
720
721
expect (currentUrl, secondaryUrl);
721
722
});
@@ -799,8 +800,7 @@ Future<void> main() async {
799
800
});
800
801
801
802
testWidgets ('can block requests' , (WidgetTester tester) async {
802
- final StreamController <String > pageLoads =
803
- StreamController <String >.broadcast ();
803
+ Completer <void > pageLoaded = Completer <void >();
804
804
805
805
final PlatformWebViewController controller = PlatformWebViewController (
806
806
const PlatformWebViewControllerCreationParams (),
@@ -810,7 +810,7 @@ Future<void> main() async {
810
810
PlatformNavigationDelegate (
811
811
const PlatformNavigationDelegateCreationParams (),
812
812
)
813
- ..setOnPageFinished ((String url ) => pageLoads. add (url ))
813
+ ..setOnPageFinished ((_ ) => pageLoaded. complete ( ))
814
814
..setOnNavigationRequest ((NavigationRequest navigationRequest) {
815
815
return (navigationRequest.url.contains ('youtube.com' ))
816
816
? NavigationDecision .prevent
@@ -827,22 +827,23 @@ Future<void> main() async {
827
827
},
828
828
));
829
829
830
- await pageLoads.stream.first; // Wait for initial page load.
830
+ await pageLoaded.future; // Wait for initial page load.
831
+
832
+ pageLoaded = Completer <void >();
831
833
await controller
832
834
.runJavaScript ('location.href = "https://www.youtube.com/"' );
833
835
834
836
// There should never be any second page load, since our new URL is
835
837
// blocked. Still wait for a potential page change for some time in order
836
838
// 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 );
839
841
final String ? currentUrl = await controller.currentUrl ();
840
842
expect (currentUrl, isNot (contains ('youtube.com' )));
841
843
});
842
844
843
845
testWidgets ('supports asynchronous decisions' , (WidgetTester tester) async {
844
- final StreamController <String > pageLoads =
845
- StreamController <String >.broadcast ();
846
+ Completer <void > pageLoaded = Completer <void >();
846
847
847
848
final PlatformWebViewController controller = PlatformWebViewController (
848
849
const PlatformWebViewControllerCreationParams (),
@@ -852,7 +853,7 @@ Future<void> main() async {
852
853
PlatformNavigationDelegate (
853
854
const PlatformNavigationDelegateCreationParams (),
854
855
)
855
- ..setOnPageFinished ((String url ) => pageLoads. add (url ))
856
+ ..setOnPageFinished ((_ ) => pageLoaded. complete ( ))
856
857
..setOnNavigationRequest (
857
858
(NavigationRequest navigationRequest) async {
858
859
NavigationDecision decision = NavigationDecision .prevent;
@@ -872,10 +873,12 @@ Future<void> main() async {
872
873
},
873
874
));
874
875
875
- await pageLoads.stream.first; // Wait for initial page load.
876
+ await pageLoaded.future; // Wait for initial page load.
877
+
878
+ pageLoaded = Completer <void >();
876
879
await controller.runJavaScript ('location.href = "$secondaryUrl "' );
880
+ await pageLoaded.future; // Wait for second page to load.
877
881
878
- await pageLoads.stream.first; // Wait for second page to load.
879
882
final String ? currentUrl = await controller.currentUrl ();
880
883
expect (currentUrl, secondaryUrl);
881
884
});
0 commit comments