@@ -116,6 +116,8 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
116116 ImageStream ? _prevPreCacheStream;
117117 ImageStream ? _nextPreCacheStream;
118118
119+ KeepAliveLink ? _stackChildrenKeepAlive;
120+
119121 @override
120122 void initState () {
121123 super .initState ();
@@ -126,6 +128,10 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
126128 WidgetsBinding .instance.addPostFrameCallback (_onAssetInit);
127129 reloadSubscription = EventStream .shared.listen (_onEvent);
128130 heroOffset = widget.heroOffset ?? TabsRouterScope .of (context)? .controller.activeIndex ?? 0 ;
131+ final asset = ref.read (currentAssetNotifier);
132+ if (asset != null ) {
133+ _stackChildrenKeepAlive = ref.read (stackChildrenNotifier (asset).notifier).ref.keepAlive ();
134+ }
129135 }
130136
131137 @override
@@ -137,6 +143,7 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
137143 _prevPreCacheStream? .removeListener (_dummyListener);
138144 _nextPreCacheStream? .removeListener (_dummyListener);
139145 SystemChrome .setEnabledSystemUIMode (SystemUiMode .edgeToEdge);
146+ _stackChildrenKeepAlive? .close ();
140147 super .dispose ();
141148 }
142149
@@ -200,6 +207,8 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
200207 widget.changeAsset (ref, asset);
201208 _precacheAssets (index);
202209 _handleCasting ();
210+ _stackChildrenKeepAlive? .close ();
211+ _stackChildrenKeepAlive = ref.read (stackChildrenNotifier (asset).notifier).ref.keepAlive ();
203212 }
204213
205214 void _handleCasting () {
@@ -527,7 +536,7 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
527536 BaseAsset displayAsset = asset;
528537 final stackChildren = ref.read (stackChildrenNotifier (asset)).valueOrNull;
529538 if (stackChildren != null && stackChildren.isNotEmpty) {
530- displayAsset = stackChildren.elementAt (ref.read (assetViewerProvider. select ((s) => s .stackIndex)) );
539+ displayAsset = stackChildren.elementAt (ref.read (assetViewerProvider) .stackIndex);
531540 }
532541
533542 final isPlayingMotionVideo = ref.read (isPlayingMotionVideoProvider);
0 commit comments