@@ -69,47 +69,50 @@ Future<void> main() async {
6969 testWidgets (
7070 'WKWebView is released by garbage collection' ,
7171 (WidgetTester tester) async {
72- final Completer < void > webViewGCCompleter = Completer < void >() ;
72+ bool aWebViewHasBeenGarbageCollected = false ;
7373
7474 late final InstanceManager instanceManager;
7575 instanceManager =
7676 InstanceManager (onWeakReferenceRemoved: (int identifier) {
77- final Copyable instance =
78- instanceManager.getInstanceWithWeakReference (identifier)! ;
79- if (instance is WKWebView && ! webViewGCCompleter.isCompleted) {
80- webViewGCCompleter.complete ();
77+ if (! aWebViewHasBeenGarbageCollected) {
78+ final Copyable instance =
79+ instanceManager.getInstanceWithWeakReference (identifier)! ;
80+ if (instance is WKWebView ) {
81+ aWebViewHasBeenGarbageCollected = true ;
82+ }
8183 }
8284 });
8385
84- await tester.pumpWidget (
85- Builder (
86- builder: (BuildContext context) {
87- return PlatformWebViewWidget (
88- WebKitWebViewWidgetCreationParams (
89- instanceManager: instanceManager,
90- controller: PlatformWebViewController (
91- WebKitWebViewControllerCreationParams (
92- instanceManager: instanceManager,
86+ // Wait for any WebView to be garbage collected.
87+ while (! aWebViewHasBeenGarbageCollected) {
88+ await tester.pumpWidget (
89+ Builder (
90+ builder: (BuildContext context) {
91+ return PlatformWebViewWidget (
92+ WebKitWebViewWidgetCreationParams (
93+ instanceManager: instanceManager,
94+ controller: PlatformWebViewController (
95+ WebKitWebViewControllerCreationParams (
96+ instanceManager: instanceManager,
97+ ),
9398 ),
9499 ),
95- ),
96- ).build (context);
97- },
98- ),
99- );
100- await tester.pumpAndSettle ();
101-
102- await tester.pumpWidget (Container ());
103-
104- // Force garbage collection.
105- await IntegrationTestWidgetsFlutterBinding .instance
106- .watchPerformance (() async {
100+ ).build (context);
101+ },
102+ ),
103+ );
107104 await tester.pumpAndSettle ();
108- });
109105
110- await expectLater (webViewGCCompleter.future, completes);
106+ await tester.pumpWidget (Container ());
107+
108+ // Force garbage collection.
109+ await IntegrationTestWidgetsFlutterBinding .instance
110+ .watchPerformance (() async {
111+ await tester.pumpAndSettle ();
112+ });
113+ }
111114 },
112- timeout: const Timeout (Duration (seconds: 10 )),
115+ timeout: const Timeout (Duration (seconds: 30 )),
113116 );
114117
115118 testWidgets ('loadRequest' , (WidgetTester tester) async {
0 commit comments