From f155dbb768845c800c7bcc24530a58cb940bd7e9 Mon Sep 17 00:00:00 2001 From: Tien Do Nam Date: Sat, 29 Jun 2024 17:42:12 +0200 Subject: [PATCH] fix: should not flicker --- lib/src/rendering/local_hero_layer.dart | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/src/rendering/local_hero_layer.dart b/lib/src/rendering/local_hero_layer.dart index 8dece56..e56f06e 100644 --- a/lib/src/rendering/local_hero_layer.dart +++ b/lib/src/rendering/local_hero_layer.dart @@ -1,5 +1,6 @@ import 'package:flutter/animation.dart'; import 'package:flutter/rendering.dart'; +import 'package:flutter/scheduler.dart'; import 'package:local_hero/src/rendering/controller.dart'; import 'package:local_hero/src/rendering/layer.dart'; @@ -144,6 +145,16 @@ class RenderLocalHeroFollowerLayer extends RenderProxyBox { : constraints.enforce(BoxConstraints.tight(requestedSize)); child!.layout(childConstraints, parentUsesSize: true); size = constraints.constrain(child!.size); + + if (requestedSize == null) { + // The size is not known yet, let's wait for the next frame. + // This happens e.g. when the widget is animated (e.g. flutter_animate). + // Removing this "workaround" will result in a flickering effect where the + // first frame of the animation takes the full size of the LocalHeroScope. + SchedulerBinding.instance.addPostFrameCallback((_) { + markNeedsLayout(); + }); + } } @override