From ad680b6a35b58b998a9f4d293898d896cff9388e Mon Sep 17 00:00:00 2001 From: martyfuhry Date: Tue, 4 Apr 2023 18:23:47 -0400 Subject: [PATCH] fix(mobile): Fixed hero animation re-enabling on immich asset grid (#2169) * fixed hero animation re-enabling on immich asset grid * comments --- .../home/ui/asset_grid/immich_asset_grid.dart | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart b/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart index fc245e4a1..5b28ad3ba 100644 --- a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart +++ b/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart @@ -38,19 +38,27 @@ class ImmichAssetGrid extends HookConsumerWidget { // Needs to suppress hero animations when navigating to this widget final enableHeroAnimations = useState(false); + final transitionDuration = ModalRoute.of(context)?.transitionDuration; - // Wait for transition to complete, then re-enable - ModalRoute.of(context)?.animation?.addListener(() { - // If we've already enabled, we are done - if (enableHeroAnimations.value) { - return; - } - final animation = ModalRoute.of(context)?.animation; - if (animation != null) { - // When the animation is complete, re-enable hero animations - enableHeroAnimations.value = animation.isCompleted; - } - }); + useEffect( + () { + // Wait for transition to complete, then re-enable + if (transitionDuration == null) { + // No route transition found, maybe we opened this up first + enableHeroAnimations.value = true; + } else { + // Unfortunately, using the transition animation itself didn't + // seem to work reliably. So instead, wait until the duration of the + // animation has elapsed to re-enable the hero animations + Future.delayed(transitionDuration) + .then((_) { + enableHeroAnimations.value = true; + }); + } + return null; + }, + [], + ); Future onWillPop() async { enableHeroAnimations.value = false;