@@ -260,6 +260,42 @@ void main() {
260
260
expect (renderBox.debugLayer, isNull);
261
261
});
262
262
});
263
+
264
+ test ('markNeedsPaint does not get called when setting the same viewController' , () {
265
+ FakeAsync ().run ((FakeAsync async ) {
266
+ final Completer <void > viewCreation = Completer <void >();
267
+ const MethodChannel channel = MethodChannel ('flutter/platform_views' );
268
+ binding.defaultBinaryMessenger.setMockMethodCallHandler (channel, (MethodCall methodCall) async {
269
+ assert (methodCall.method == 'create' , 'Unexpected method call' );
270
+ await viewCreation.future;
271
+ return /*textureId=*/ 0 ;
272
+ });
273
+
274
+ bool futureCallbackRan = false ;
275
+
276
+ PlatformViewsService .initUiKitView (id: 0 , viewType: 'webview' , layoutDirection: TextDirection .ltr).then ((UiKitViewController viewController) {
277
+ final RenderUiKitView renderBox = RenderUiKitView (
278
+ viewController: viewController,
279
+ hitTestBehavior: PlatformViewHitTestBehavior .opaque,
280
+ gestureRecognizers: < Factory <OneSequenceGestureRecognizer >> {},
281
+ );
282
+
283
+ layout (renderBox);
284
+ pumpFrame (phase: EnginePhase .paint);
285
+ expect (renderBox.debugNeedsPaint, isFalse);
286
+
287
+ renderBox.viewController = viewController;
288
+
289
+ expect (renderBox.debugNeedsPaint, isFalse);
290
+
291
+ futureCallbackRan = true ;
292
+ });
293
+
294
+ viewCreation.complete ();
295
+ async .flushMicrotasks ();
296
+ expect (futureCallbackRan, true );
297
+ });
298
+ });
263
299
}
264
300
265
301
ui.PointerData _pointerData (
0 commit comments