@@ -69,47 +69,50 @@ Future<void> main() async {
69
69
testWidgets (
70
70
'WKWebView is released by garbage collection' ,
71
71
(WidgetTester tester) async {
72
- final Completer < void > webViewGCCompleter = Completer < void >() ;
72
+ bool aWebViewHasBeenGarbageCollected = false ;
73
73
74
74
late final InstanceManager instanceManager;
75
75
instanceManager =
76
76
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
+ }
81
83
}
82
84
});
83
85
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
+ ),
93
98
),
94
99
),
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
+ );
107
104
await tester.pumpAndSettle ();
108
- });
109
105
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
+ }
111
114
},
112
- timeout: const Timeout (Duration (seconds: 10 )),
115
+ timeout: const Timeout (Duration (seconds: 30 )),
113
116
);
114
117
115
118
testWidgets ('loadRequest' , (WidgetTester tester) async {
0 commit comments