From c3c4157d2bab9c5c13a7ecaccd726e194be181eb Mon Sep 17 00:00:00 2001 From: Noel S Date: Mon, 8 Dec 2025 18:36:59 -0800 Subject: [PATCH 1/8] test --- mobile/lib/widgets/common/immich_thumbnail.dart | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mobile/lib/widgets/common/immich_thumbnail.dart b/mobile/lib/widgets/common/immich_thumbnail.dart index 612a6a4bd0..a6006f77e1 100644 --- a/mobile/lib/widgets/common/immich_thumbnail.dart +++ b/mobile/lib/widgets/common/immich_thumbnail.dart @@ -13,12 +13,20 @@ import 'package:octo_image/octo_image.dart'; import 'package:immich_mobile/providers/user.provider.dart'; class ImmichThumbnail extends HookConsumerWidget { - const ImmichThumbnail({this.asset, this.width = 250, this.height = 250, this.fit = BoxFit.cover, super.key}); + const ImmichThumbnail({ + this.asset, + this.width = 250, + this.height = 250, + this.fit = BoxFit.cover, + super.key, + this.placeholderEnabled = true, + }); final Asset? asset; final double width; final double height; final BoxFit fit; + final bool placeholderEnabled; /// Helper function to return the image provider for the asset thumbnail /// either by using the asset ID or the asset itself @@ -47,7 +55,7 @@ class ImmichThumbnail extends HookConsumerWidget { if (asset == null) { return Container( - color: Colors.grey, + color: Colors.black, width: width, height: height, child: const Center(child: Icon(Icons.no_photography)), From 0dace87ba6faf4ec63c59394e00ea1b71cff6227 Mon Sep 17 00:00:00 2001 From: goalie2002 Date: Mon, 8 Dec 2025 19:38:53 -0800 Subject: [PATCH 2/8] wip --- .../widgets/images/thumbnail_tile.widget.dart | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart index c7628cb472..59ca189bbc 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart @@ -28,6 +28,8 @@ class ThumbnailTile extends ConsumerWidget { final bool showStorageIndicator; final bool lockSelection; final int? heroOffset; + final bool enablePlaceholder = false; + final bool showIndicators = false; @override Widget build(BuildContext context, WidgetRef ref) { @@ -47,7 +49,13 @@ class ThumbnailTile extends ConsumerWidget { return Stack( children: [ - Container(color: lockSelection ? context.colorScheme.surfaceContainerHighest : assetContainerColor), + Container( + color: lockSelection + ? context.colorScheme.surfaceContainerHighest + : isSelected + ? assetContainerColor + : Colors.transparent, + ), AnimatedContainer( duration: Durations.short4, curve: Curves.decelerate, From 392a5cc2ed200fe1ff73375dc9d94e298b561e24 Mon Sep 17 00:00:00 2001 From: goalie2002 Date: Mon, 8 Dec 2025 21:31:47 -0800 Subject: [PATCH 3/8] fix: indicators popping in due to z height change of hero animation (fade in instead after animation) --- .../asset_viewer/asset_viewer.page.dart | 1 + .../widgets/images/thumbnail_tile.widget.dart | 131 ++++++++++++++---- .../asset_viewer/current_asset.provider.dart | 8 ++ 3 files changed, 110 insertions(+), 30 deletions(-) diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart index 50c4347301..2f62236aeb 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart @@ -619,6 +619,7 @@ class _AssetViewerState extends ConsumerState { } void _onPop(bool didPop, T? result) { + ref.read(currentAssetNotifier.notifier).clearAsset(); // clear current asset ref.read(currentAssetNotifier.notifier).dispose(); } diff --git a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart index 59ca189bbc..26cd3d155a 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart @@ -10,6 +10,66 @@ import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart' import 'package:immich_mobile/presentation/widgets/timeline/constants.dart'; import 'package:immich_mobile/providers/infrastructure/setting.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; +import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart'; + +class _DelayedAnimation extends StatefulWidget { + final Widget child; + final bool show; + final Duration showDelay = const Duration(milliseconds: 300); + final Duration hideDelay = const Duration(milliseconds: 0); + final Duration showDuration = const Duration(milliseconds: 200); + final Duration hideDuration = const Duration(milliseconds: 100); + + const _DelayedAnimation({required this.child, required this.show}); + + @override + State<_DelayedAnimation> createState() => _DelayedAnimationState(); +} + +class _DelayedAnimationState extends State<_DelayedAnimation> { + bool _show = false; + Duration _currentDuration = const Duration(milliseconds: 200); + + @override + void initState() { + super.initState(); + // If starting with show=true, show immediately (no delay on initial render) + if (widget.show) { + _show = true; + _currentDuration = const Duration(milliseconds: 200); + } + } + + @override + void didUpdateWidget(_DelayedAnimation oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.show && !oldWidget.show) { + // Showing: use show duration and delay + setState(() => _currentDuration = widget.showDuration); + Future.delayed(widget.showDelay, () { + if (mounted) { + setState(() => _show = true); + } + }); + } else if (!widget.show && oldWidget.show) { + // Hiding: use hide duration and no delay + setState(() { + _currentDuration = widget.hideDuration; + Future.delayed(widget.hideDelay, () { + if (mounted) { + setState(() => _show = false); + } + }); + }); + } + } + + @override + Widget build(BuildContext context) { + return AnimatedOpacity(duration: _currentDuration, opacity: widget.show && _show ? 1.0 : 0.0, child: widget.child); + } +} class ThumbnailTile extends ConsumerWidget { const ThumbnailTile( @@ -28,13 +88,13 @@ class ThumbnailTile extends ConsumerWidget { final bool showStorageIndicator; final bool lockSelection; final int? heroOffset; - final bool enablePlaceholder = false; - final bool showIndicators = false; @override Widget build(BuildContext context, WidgetRef ref) { final asset = this.asset; final heroIndex = heroOffset ?? TabsRouterScope.of(context)?.controller.activeIndex ?? 0; + final currentAsset = ref.watch(currentAssetNotifier); + final showIndicators = asset == null || asset != currentAsset; final assetContainerColor = context.isDarkTheme ? context.primaryColor.darken(amount: 0.4) @@ -76,40 +136,51 @@ class ThumbnailTile extends ConsumerWidget { ), ), if (asset != null) - Align( - alignment: Alignment.topRight, - child: _AssetTypeIcons(asset: asset), + _DelayedAnimation( + show: showIndicators, + child: Align( + alignment: Alignment.topRight, + child: _AssetTypeIcons(asset: asset), + ), ), + if (storageIndicator && asset != null) - switch (asset.storage) { - AssetState.local => const Align( - alignment: Alignment.bottomRight, - child: Padding( - padding: EdgeInsets.only(right: 10.0, bottom: 6.0), - child: _TileOverlayIcon(Icons.cloud_off_outlined), + _DelayedAnimation( + show: showIndicators, + child: switch (asset.storage) { + AssetState.local => const Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: EdgeInsets.only(right: 10.0, bottom: 6.0), + child: _TileOverlayIcon(Icons.cloud_off_outlined), + ), ), - ), - AssetState.remote => const Align( - alignment: Alignment.bottomRight, - child: Padding( - padding: EdgeInsets.only(right: 10.0, bottom: 6.0), - child: _TileOverlayIcon(Icons.cloud_outlined), + AssetState.remote => const Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: EdgeInsets.only(right: 10.0, bottom: 6.0), + child: _TileOverlayIcon(Icons.cloud_outlined), + ), ), - ), - AssetState.merged => const Align( - alignment: Alignment.bottomRight, - child: Padding( - padding: EdgeInsets.only(right: 10.0, bottom: 6.0), - child: _TileOverlayIcon(Icons.cloud_done_outlined), + AssetState.merged => const Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: EdgeInsets.only(right: 10.0, bottom: 6.0), + child: _TileOverlayIcon(Icons.cloud_done_outlined), + ), ), - ), - }, + }, + ), + if (asset != null && asset.isFavorite) - const Align( - alignment: Alignment.bottomLeft, - child: Padding( - padding: EdgeInsets.only(left: 10.0, bottom: 6.0), - child: _TileOverlayIcon(Icons.favorite_rounded), + _DelayedAnimation( + show: showIndicators, + child: const Align( + alignment: Alignment.bottomLeft, + child: Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 6.0), + child: _TileOverlayIcon(Icons.favorite_rounded), + ), ), ), ], diff --git a/mobile/lib/providers/infrastructure/asset_viewer/current_asset.provider.dart b/mobile/lib/providers/infrastructure/asset_viewer/current_asset.provider.dart index 1956170c1e..2c16e6e19d 100644 --- a/mobile/lib/providers/infrastructure/asset_viewer/current_asset.provider.dart +++ b/mobile/lib/providers/infrastructure/asset_viewer/current_asset.provider.dart @@ -25,6 +25,14 @@ class CurrentAssetNotifier extends AutoDisposeNotifier { _keepAliveLink = ref.keepAlive(); } + void clearAsset() { + _keepAliveLink?.close(); + _assetSubscription?.cancel(); + _keepAliveLink = null; + _assetSubscription = null; + state = null; + } + void dispose() { _keepAliveLink?.close(); _assetSubscription?.cancel(); From 699f369f4d810b63d90c916932a80fba146d734c Mon Sep 17 00:00:00 2001 From: goalie2002 Date: Mon, 8 Dec 2025 22:40:02 -0800 Subject: [PATCH 4/8] wip --- .../widgets/images/thumbnail_tile.widget.dart | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart index 26cd3d155a..e3cca53770 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart @@ -15,12 +15,19 @@ import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asse class _DelayedAnimation extends StatefulWidget { final Widget child; final bool show; - final Duration showDelay = const Duration(milliseconds: 300); - final Duration hideDelay = const Duration(milliseconds: 0); - final Duration showDuration = const Duration(milliseconds: 200); - final Duration hideDuration = const Duration(milliseconds: 100); + final Duration showDelay; + final Duration hideDelay; + final Duration showDuration; + final Duration hideDuration; - const _DelayedAnimation({required this.child, required this.show}); + const _DelayedAnimation({ + required this.child, + required this.show, + this.showDelay = const Duration(milliseconds: 300), + this.hideDelay = const Duration(milliseconds: 0), + this.showDuration = const Duration(milliseconds: 200), + this.hideDuration = const Duration(milliseconds: 150), + }); @override State<_DelayedAnimation> createState() => _DelayedAnimationState(); @@ -109,12 +116,13 @@ class ThumbnailTile extends ConsumerWidget { return Stack( children: [ - Container( - color: lockSelection - ? context.colorScheme.surfaceContainerHighest - : isSelected - ? assetContainerColor - : Colors.transparent, + _DelayedAnimation( + show: isSelected || lockSelection, + showDelay: Duration.zero, + hideDelay: Durations.short4, // Wait for indicators to finish + showDuration: Duration.zero, + hideDuration: Duration.zero, + child: Container(color: lockSelection ? context.colorScheme.surfaceContainerHighest : assetContainerColor), ), AnimatedContainer( duration: Durations.short4, From 6f14fa437dae90e75940cd79d948077833bbe40c Mon Sep 17 00:00:00 2001 From: goalie2002 Date: Tue, 9 Dec 2025 01:35:40 -0800 Subject: [PATCH 5/8] fix: selection outline changing to transparent before animation finish --- .../.gradle/4.4.1/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/4.4.1/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../widgets/images/thumbnail_tile.widget.dart | 72 ++++++++++++------ 3 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 mobile/.gradle/4.4.1/fileChanges/last-build.bin create mode 100644 mobile/.gradle/4.4.1/fileHashes/fileHashes.lock diff --git a/mobile/.gradle/4.4.1/fileChanges/last-build.bin b/mobile/.gradle/4.4.1/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/mobile/.gradle/4.4.1/fileHashes/fileHashes.lock b/mobile/.gradle/4.4.1/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..a28aefce96740bc8547c3d69928a2b0100d392e5 GIT binary patch literal 17 TcmZQ>V%~lBG1IRA1}FdkG=c;` literal 0 HcmV?d00001 diff --git a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart index e3cca53770..0f93770656 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart @@ -11,6 +11,7 @@ import 'package:immich_mobile/presentation/widgets/timeline/constants.dart'; import 'package:immich_mobile/providers/infrastructure/setting.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart'; +import 'dart:async'; class _DelayedAnimation extends StatefulWidget { final Widget child; @@ -23,10 +24,10 @@ class _DelayedAnimation extends StatefulWidget { const _DelayedAnimation({ required this.child, required this.show, - this.showDelay = const Duration(milliseconds: 300), + this.showDelay = const Duration(milliseconds: 0), this.hideDelay = const Duration(milliseconds: 0), - this.showDuration = const Duration(milliseconds: 200), - this.hideDuration = const Duration(milliseconds: 150), + this.showDuration = const Duration(milliseconds: 0), + this.hideDuration = const Duration(milliseconds: 0), }); @override @@ -36,6 +37,7 @@ class _DelayedAnimation extends StatefulWidget { class _DelayedAnimationState extends State<_DelayedAnimation> { bool _show = false; Duration _currentDuration = const Duration(milliseconds: 200); + Timer? _delayTimer; @override void initState() { @@ -43,7 +45,7 @@ class _DelayedAnimationState extends State<_DelayedAnimation> { // If starting with show=true, show immediately (no delay on initial render) if (widget.show) { _show = true; - _currentDuration = const Duration(milliseconds: 200); + _currentDuration = widget.showDuration; } } @@ -51,30 +53,50 @@ class _DelayedAnimationState extends State<_DelayedAnimation> { void didUpdateWidget(_DelayedAnimation oldWidget) { super.didUpdateWidget(oldWidget); + // Cancel any pending timer + _delayTimer?.cancel(); + if (widget.show && !oldWidget.show) { - // Showing: use show duration and delay - setState(() => _currentDuration = widget.showDuration); - Future.delayed(widget.showDelay, () { - if (mounted) { - setState(() => _show = true); - } - }); + // Showing: set duration, then delay, then show + _currentDuration = widget.showDuration; + if (widget.showDelay == Duration.zero) { + setState(() => _show = true); + } else { + _delayTimer = Timer(widget.showDelay, () { + if (mounted) { + setState(() => _show = true); + } + }); + } } else if (!widget.show && oldWidget.show) { - // Hiding: use hide duration and no delay - setState(() { - _currentDuration = widget.hideDuration; - Future.delayed(widget.hideDelay, () { + // Hiding: delay, then set duration and hide + if (widget.hideDelay == Duration.zero) { + setState(() { + _currentDuration = widget.hideDuration; + _show = false; + }); + } else { + _delayTimer = Timer(widget.hideDelay, () { if (mounted) { - setState(() => _show = false); + setState(() { + _currentDuration = widget.hideDuration; + _show = false; + }); } }); - }); + } } } + @override + void dispose() { + _delayTimer?.cancel(); + super.dispose(); + } + @override Widget build(BuildContext context) { - return AnimatedOpacity(duration: _currentDuration, opacity: widget.show && _show ? 1.0 : 0.0, child: widget.child); + return AnimatedOpacity(duration: _currentDuration, opacity: _show ? 1.0 : 0.0, child: widget.child); } } @@ -118,10 +140,7 @@ class ThumbnailTile extends ConsumerWidget { children: [ _DelayedAnimation( show: isSelected || lockSelection, - showDelay: Duration.zero, - hideDelay: Durations.short4, // Wait for indicators to finish - showDuration: Duration.zero, - hideDuration: Duration.zero, + hideDelay: Durations.short4, child: Container(color: lockSelection ? context.colorScheme.surfaceContainerHighest : assetContainerColor), ), AnimatedContainer( @@ -146,6 +165,9 @@ class ThumbnailTile extends ConsumerWidget { if (asset != null) _DelayedAnimation( show: showIndicators, + showDelay: const Duration(milliseconds: 300), + showDuration: const Duration(milliseconds: 200), + hideDuration: const Duration(milliseconds: 150), child: Align( alignment: Alignment.topRight, child: _AssetTypeIcons(asset: asset), @@ -155,6 +177,9 @@ class ThumbnailTile extends ConsumerWidget { if (storageIndicator && asset != null) _DelayedAnimation( show: showIndicators, + showDelay: const Duration(milliseconds: 300), + showDuration: const Duration(milliseconds: 200), + hideDuration: const Duration(milliseconds: 150), child: switch (asset.storage) { AssetState.local => const Align( alignment: Alignment.bottomRight, @@ -183,6 +208,9 @@ class ThumbnailTile extends ConsumerWidget { if (asset != null && asset.isFavorite) _DelayedAnimation( show: showIndicators, + showDelay: const Duration(milliseconds: 300), + showDuration: const Duration(milliseconds: 200), + hideDuration: const Duration(milliseconds: 150), child: const Align( alignment: Alignment.bottomLeft, child: Padding( From b20d31166e468aa8e59b46474ca3bcc4c6bfadc3 Mon Sep 17 00:00:00 2001 From: goalie2002 Date: Tue, 9 Dec 2025 11:16:38 -0800 Subject: [PATCH 6/8] Remove unnecessary changes and follow conventions --- .../widgets/images/thumbnail_tile.widget.dart | 5 +++-- mobile/lib/widgets/common/immich_thumbnail.dart | 12 ++---------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart index 0f93770656..4eba195f35 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; @@ -8,10 +10,9 @@ import 'package:immich_mobile/extensions/duration_extensions.dart'; import 'package:immich_mobile/extensions/theme_extensions.dart'; import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart'; import 'package:immich_mobile/presentation/widgets/timeline/constants.dart'; +import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart'; import 'package:immich_mobile/providers/infrastructure/setting.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; -import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart'; -import 'dart:async'; class _DelayedAnimation extends StatefulWidget { final Widget child; diff --git a/mobile/lib/widgets/common/immich_thumbnail.dart b/mobile/lib/widgets/common/immich_thumbnail.dart index a6006f77e1..612a6a4bd0 100644 --- a/mobile/lib/widgets/common/immich_thumbnail.dart +++ b/mobile/lib/widgets/common/immich_thumbnail.dart @@ -13,20 +13,12 @@ import 'package:octo_image/octo_image.dart'; import 'package:immich_mobile/providers/user.provider.dart'; class ImmichThumbnail extends HookConsumerWidget { - const ImmichThumbnail({ - this.asset, - this.width = 250, - this.height = 250, - this.fit = BoxFit.cover, - super.key, - this.placeholderEnabled = true, - }); + const ImmichThumbnail({this.asset, this.width = 250, this.height = 250, this.fit = BoxFit.cover, super.key}); final Asset? asset; final double width; final double height; final BoxFit fit; - final bool placeholderEnabled; /// Helper function to return the image provider for the asset thumbnail /// either by using the asset ID or the asset itself @@ -55,7 +47,7 @@ class ImmichThumbnail extends HookConsumerWidget { if (asset == null) { return Container( - color: Colors.black, + color: Colors.grey, width: width, height: height, child: const Center(child: Icon(Icons.no_photography)), From 0ba43c63177b8f495d73bbadd67762d4ac8cbeab Mon Sep 17 00:00:00 2001 From: goalie2002 Date: Tue, 9 Dec 2025 11:19:21 -0800 Subject: [PATCH 7/8] remove accidentally included files --- mobile/.gradle/4.4.1/fileChanges/last-build.bin | Bin 1 -> 0 bytes mobile/.gradle/4.4.1/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mobile/.gradle/4.4.1/fileChanges/last-build.bin delete mode 100644 mobile/.gradle/4.4.1/fileHashes/fileHashes.lock diff --git a/mobile/.gradle/4.4.1/fileChanges/last-build.bin b/mobile/.gradle/4.4.1/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/mobile/.gradle/4.4.1/fileHashes/fileHashes.lock b/mobile/.gradle/4.4.1/fileHashes/fileHashes.lock deleted file mode 100644 index a28aefce96740bc8547c3d69928a2b0100d392e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQ>V%~lBG1IRA1}FdkG=c;` From f1fbd313a5ed45837e8552eb1fae1ca1eb3f681d Mon Sep 17 00:00:00 2001 From: goalie2002 Date: Tue, 9 Dec 2025 11:25:28 -0800 Subject: [PATCH 8/8] clean up --- .../presentation/widgets/asset_viewer/asset_viewer.page.dart | 2 +- .../presentation/widgets/images/thumbnail_tile.widget.dart | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart index 7e60aa5139..b3c0099b71 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart @@ -619,7 +619,7 @@ class _AssetViewerState extends ConsumerState { } void _onPop(bool didPop, T? result) { - ref.read(currentAssetNotifier.notifier).clearAsset(); // clear current asset + ref.read(currentAssetNotifier.notifier).clearAsset(); ref.read(currentAssetNotifier.notifier).dispose(); } diff --git a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart index 4eba195f35..6fe13b5333 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart @@ -58,7 +58,7 @@ class _DelayedAnimationState extends State<_DelayedAnimation> { _delayTimer?.cancel(); if (widget.show && !oldWidget.show) { - // Showing: set duration, then delay, then show + // Showing _currentDuration = widget.showDuration; if (widget.showDelay == Duration.zero) { setState(() => _show = true); @@ -70,7 +70,7 @@ class _DelayedAnimationState extends State<_DelayedAnimation> { }); } } else if (!widget.show && oldWidget.show) { - // Hiding: delay, then set duration and hide + // Hiding if (widget.hideDelay == Duration.zero) { setState(() { _currentDuration = widget.hideDuration;