fix: restore ancestors album to currentRemoteAlbumProvider when popping

This commit is contained in:
bwees 2025-09-21 23:19:12 -05:00
parent 8465d6c493
commit 91d6fedbf2
No known key found for this signature in database
3 changed files with 13 additions and 7 deletions

View File

@ -1,4 +1,5 @@
import 'package:auto_route/auto_route.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
@ -226,10 +227,19 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
if (didPop || !mounted) {
return;
}
final hasAncestor = context.findAncestorWidgetOfExactType<RemoteAlbumPage>() != null;
final ancestors = context.router.stack.take(context.router.stack.length - 1);
final ancestorPage = ancestors.lastWhereOrNull((route) {
return route.name == RemoteAlbumRoute.page.name;
});
Navigator.of(context).pop();
if (!hasAncestor) {
if (ancestorPage == null) {
ref.read(currentRemoteAlbumProvider.notifier).dispose();
} else {
final album = (ancestorPage.routeData.args as RemoteAlbumRouteArgs).album;
ref.read(currentRemoteAlbumProvider.notifier).setAlbum(album);
}
},
child: ProviderScope(

View File

@ -175,13 +175,9 @@ class _AssetDetailBottomSheet extends ConsumerWidget {
album: album,
isOwner: isOwner,
onAlbumSelected: (album) async {
final prevAlbum = ref.read(currentRemoteAlbumProvider);
ref.read(currentRemoteAlbumProvider.notifier).setAlbum(album);
ref.invalidate(assetViewerProvider);
context.router.popAndPush(RemoteAlbumRoute(album: album));
if (prevAlbum != null) {
ref.read(currentRemoteAlbumProvider.notifier).setAlbum(prevAlbum);
}
},
);
}),

View File

@ -303,7 +303,7 @@ class AppRouter extends RootStackRouter {
AutoRoute(page: DriftBackupAlbumSelectionRoute.page, guards: [_authGuard, _duplicateGuard]),
AutoRoute(page: LocalTimelineRoute.page, guards: [_authGuard, _duplicateGuard]),
AutoRoute(page: MainTimelineRoute.page, guards: [_authGuard, _duplicateGuard]),
AutoRoute(page: RemoteAlbumRoute.page, guards: [_authGuard, _duplicateGuard]),
AutoRoute(page: RemoteAlbumRoute.page, guards: [_authGuard]),
AutoRoute(
page: AssetViewerRoute.page,
guards: [_authGuard, _duplicateGuard],