This repository was archived by the owner on Feb 25, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +28
-3
lines changed Expand file tree Collapse file tree 3 files changed +28
-3
lines changed Original file line number Diff line number Diff line change @@ -659,7 +659,7 @@ class HtmlViewEmbedder {
659
659
660
660
/// Disposes the state of this view embedder.
661
661
void dispose () {
662
- final Set <int > allViews = PlatformViewManager .instance.debugClear ();
662
+ final Set <int > allViews = PlatformViewManager .instance.getKnownPlatformViewIds ();
663
663
disposeViews (allViews);
664
664
_context = EmbedderFrameContext ();
665
665
_currentCompositionParams.clear ();
Original file line number Diff line number Diff line change @@ -212,9 +212,10 @@ class PlatformViewManager {
212
212
/// component.
213
213
bool isVisible (int viewId) => ! isInvisible (viewId);
214
214
215
- /// Clears the state. Used in tests.
216
- ///
217
215
/// Returns the set of know view ids, so they can be cleaned up.
216
+ Set <int > getKnownPlatformViewIds () => _contents.keys.toSet ();
217
+
218
+ /// Clears the state. Used in tests.
218
219
Set <int > debugClear () {
219
220
final Set <int > result = _contents.keys.toSet ();
220
221
result.forEach (clearPlatformView);
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import 'package:test/bootstrap/browser.dart';
6
6
import 'package:test/test.dart' ;
7
7
import 'package:ui/src/engine.dart' ;
8
8
import 'package:ui/ui.dart' as ui;
9
+ import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
9
10
10
11
import '../common/matchers.dart' ;
11
12
import 'common.dart' ;
@@ -68,5 +69,28 @@ void testMain() {
68
69
isNull,
69
70
);
70
71
});
72
+
73
+ // Issue https://github.com/flutter/flutter/issues/142094
74
+ test ('does not reset platform view factories when disposing a view' , () async {
75
+ expect (PlatformViewManager .instance.knowsViewType ('self-test' ), isFalse);
76
+
77
+ final EngineFlutterView view = EngineFlutterView (
78
+ EnginePlatformDispatcher .instance, createDomElement ('multi-view' ));
79
+ EnginePlatformDispatcher .instance.viewManager.registerView (view);
80
+ expect (
81
+ CanvasKitRenderer .instance.debugGetRasterizerForView (view),
82
+ isNotNull,
83
+ );
84
+
85
+ EnginePlatformDispatcher .instance.viewManager
86
+ .disposeAndUnregisterView (view.viewId);
87
+ expect (
88
+ CanvasKitRenderer .instance.debugGetRasterizerForView (view),
89
+ isNull,
90
+ );
91
+
92
+ expect (PlatformViewManager .instance.knowsViewType (ui_web.PlatformViewRegistry .defaultVisibleViewType), isTrue);
93
+ expect (PlatformViewManager .instance.knowsViewType (ui_web.PlatformViewRegistry .defaultInvisibleViewType), isTrue);
94
+ });
71
95
});
72
96
}
You can’t perform that action at this time.
0 commit comments