Skip to content

Commit 4cec192

Browse files
committed
keep stack children alive
1 parent d2c9356 commit 4cec192

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)