fix: add to album render empty app bar (#20480)

* fix: add to album render empty app bar

* set current album
This commit is contained in:
Alex 2025-07-31 21:28:33 -05:00 committed by GitHub
parent 4bd465e752
commit 1378f22368
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 32 deletions

View File

@ -6,7 +6,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/domain/models/album/local_album.model.dart'; import 'package:immich_mobile/domain/models/album/local_album.model.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:immich_mobile/providers/app_settings.provider.dart'; import 'package:immich_mobile/providers/app_settings.provider.dart';
import 'package:immich_mobile/providers/backup/backup_album.provider.dart'; import 'package:immich_mobile/providers/backup/backup_album.provider.dart';
import 'package:immich_mobile/providers/backup/drift_backup.provider.dart'; import 'package:immich_mobile/providers/backup/drift_backup.provider.dart';
@ -14,7 +13,6 @@ import 'package:immich_mobile/providers/user.provider.dart';
import 'package:immich_mobile/services/app_settings.service.dart'; import 'package:immich_mobile/services/app_settings.service.dart';
import 'package:immich_mobile/widgets/backup/drift_album_info_list_tile.dart'; import 'package:immich_mobile/widgets/backup/drift_album_info_list_tile.dart';
import 'package:immich_mobile/widgets/common/search_field.dart'; import 'package:immich_mobile/widgets/common/search_field.dart';
import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
@RoutePage() @RoutePage()
class DriftBackupAlbumSelectionPage extends ConsumerStatefulWidget { class DriftBackupAlbumSelectionPage extends ConsumerStatefulWidget {
@ -67,14 +65,14 @@ class _DriftBackupAlbumSelectionPageState extends ConsumerState<DriftBackupAlbum
final selectedBackupAlbums = albums.where((album) => album.backupSelection == BackupSelection.selected).toList(); final selectedBackupAlbums = albums.where((album) => album.backupSelection == BackupSelection.selected).toList();
final excludedBackupAlbums = albums.where((album) => album.backupSelection == BackupSelection.excluded).toList(); final excludedBackupAlbums = albums.where((album) => album.backupSelection == BackupSelection.excluded).toList();
handleSyncAlbumToggle(bool isEnable) async { // handleSyncAlbumToggle(bool isEnable) async {
if (isEnable) { // if (isEnable) {
await ref.read(albumProvider.notifier).refreshRemoteAlbums(); // await ref.read(albumProvider.notifier).refreshRemoteAlbums();
for (final album in selectedBackupAlbums) { // for (final album in selectedBackupAlbums) {
await ref.read(albumProvider.notifier).createSyncAlbum(album.name); // await ref.read(albumProvider.notifier).createSyncAlbum(album.name);
} // }
} // }
} // }
return PopScope( return PopScope(
onPopInvokedWithResult: (didPop, result) async { onPopInvokedWithResult: (didPop, result) async {
@ -167,16 +165,15 @@ class _DriftBackupAlbumSelectionPageState extends ConsumerState<DriftBackupAlbum
), ),
), ),
SettingsSwitchListTile( // SettingsSwitchListTile(
valueNotifier: _enableSyncUploadAlbum, // valueNotifier: _enableSyncUploadAlbum,
title: "sync_albums".t(context: context), // title: "sync_albums".t(context: context),
subtitle: "sync_upload_album_setting_subtitle".t(context: context), // subtitle: "sync_upload_album_setting_subtitle".t(context: context),
contentPadding: const EdgeInsets.symmetric(horizontal: 16), // contentPadding: const EdgeInsets.symmetric(horizontal: 16),
titleStyle: context.textTheme.bodyLarge?.copyWith(fontWeight: FontWeight.bold), // titleStyle: context.textTheme.bodyLarge?.copyWith(fontWeight: FontWeight.bold),
subtitleStyle: context.textTheme.labelLarge?.copyWith(color: context.colorScheme.primary), // subtitleStyle: context.textTheme.labelLarge?.copyWith(color: context.colorScheme.primary),
onChanged: handleSyncAlbumToggle, // onChanged: handleSyncAlbumToggle,
), // ),
ListTile( ListTile(
title: Text( title: Text(
"albums_on_device_count".t(context: context, args: {'count': albumCount.toString()}), "albums_on_device_count".t(context: context, args: {'count': albumCount.toString()}),

View File

@ -28,13 +28,15 @@ class RemoteAlbumPage extends ConsumerStatefulWidget {
} }
class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> { class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
late RemoteAlbum _album;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_album = widget.album;
} }
Future<void> addAssets(BuildContext context) async { Future<void> addAssets(BuildContext context) async {
final albumAssets = await ref.read(remoteAlbumProvider.notifier).getAssets(widget.album.id); final albumAssets = await ref.read(remoteAlbumProvider.notifier).getAssets(_album.id);
final newAssets = await context.pushRoute<Set<BaseAsset>>( final newAssets = await context.pushRoute<Set<BaseAsset>>(
DriftAssetSelectionTimelineRoute(lockedSelectionAssets: albumAssets.toSet()), DriftAssetSelectionTimelineRoute(lockedSelectionAssets: albumAssets.toSet()),
@ -47,7 +49,7 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
final added = await ref final added = await ref
.read(remoteAlbumProvider.notifier) .read(remoteAlbumProvider.notifier)
.addAssets( .addAssets(
widget.album.id, _album.id,
newAssets.map((asset) { newAssets.map((asset) {
final remoteAsset = asset as RemoteAsset; final remoteAsset = asset as RemoteAsset;
return remoteAsset.id; return remoteAsset.id;
@ -64,14 +66,14 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
} }
Future<void> addUsers(BuildContext context) async { Future<void> addUsers(BuildContext context) async {
final newUsers = await context.pushRoute<List<String>>(DriftUserSelectionRoute(album: widget.album)); final newUsers = await context.pushRoute<List<String>>(DriftUserSelectionRoute(album: _album));
if (newUsers == null || newUsers.isEmpty) { if (newUsers == null || newUsers.isEmpty) {
return; return;
} }
try { try {
await ref.read(remoteAlbumProvider.notifier).addUsers(widget.album.id, newUsers); await ref.read(remoteAlbumProvider.notifier).addUsers(_album.id, newUsers);
if (newUsers.isNotEmpty) { if (newUsers.isNotEmpty) {
ImmichToast.show( ImmichToast.show(
@ -81,7 +83,7 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
); );
} }
ref.invalidate(remoteAlbumSharedUsersProvider(widget.album.id)); ref.invalidate(remoteAlbumSharedUsersProvider(_album.id));
} catch (e) { } catch (e) {
ImmichToast.show( ImmichToast.show(
context: context, context: context,
@ -92,7 +94,7 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
} }
Future<void> toggleAlbumOrder() async { Future<void> toggleAlbumOrder() async {
await ref.read(remoteAlbumProvider.notifier).toggleAlbumOrder(widget.album.id); await ref.read(remoteAlbumProvider.notifier).toggleAlbumOrder(_album.id);
ref.invalidate(timelineServiceProvider); ref.invalidate(timelineServiceProvider);
} }
@ -106,7 +108,7 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
content: Column( content: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text('album_delete_confirmation'.t(context: context, args: {'album': widget.album.name})), Text('album_delete_confirmation'.t(context: context, args: {'album': _album.name})),
const SizedBox(height: 8), const SizedBox(height: 8),
Text('album_delete_confirmation_description'.t(context: context)), Text('album_delete_confirmation_description'.t(context: context)),
], ],
@ -128,7 +130,7 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
if (confirmed == true) { if (confirmed == true) {
try { try {
await ref.read(remoteAlbumProvider.notifier).deleteAlbum(widget.album.id); await ref.read(remoteAlbumProvider.notifier).deleteAlbum(_album.id);
ImmichToast.show( ImmichToast.show(
context: context, context: context,
@ -151,17 +153,20 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
final result = await showDialog<_EditAlbumData?>( final result = await showDialog<_EditAlbumData?>(
context: context, context: context,
barrierDismissible: true, barrierDismissible: true,
builder: (context) => _EditAlbumDialog(album: widget.album), builder: (context) => _EditAlbumDialog(album: _album),
); );
if (result != null && context.mounted) { if (result != null && context.mounted) {
setState(() {
_album = _album.copyWith(name: result.name, description: result.description ?? '');
});
HapticFeedback.mediumImpact(); HapticFeedback.mediumImpact();
} }
} }
void showOptionSheet(BuildContext context) { void showOptionSheet(BuildContext context) {
final user = ref.watch(currentUserProvider); final user = ref.watch(currentUserProvider);
final isOwner = user != null ? user.id == widget.album.ownerId : false; final isOwner = user != null ? user.id == _album.ownerId : false;
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
@ -205,7 +210,7 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
return ProviderScope( return ProviderScope(
overrides: [ overrides: [
timelineServiceProvider.overrideWith((ref) { timelineServiceProvider.overrideWith((ref) {
final timelineService = ref.watch(timelineFactoryProvider).remoteAlbum(albumId: widget.album.id); final timelineService = ref.watch(timelineFactoryProvider).remoteAlbum(albumId: _album.id);
ref.onDispose(timelineService.dispose); ref.onDispose(timelineService.dispose);
return timelineService; return timelineService;
}), }),
@ -217,7 +222,7 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
onToggleAlbumOrder: () => toggleAlbumOrder(), onToggleAlbumOrder: () => toggleAlbumOrder(),
onEditTitle: () => showEditTitleAndDescription(context), onEditTitle: () => showEditTitleAndDescription(context),
), ),
bottomSheet: RemoteAlbumBottomSheet(album: widget.album), bottomSheet: RemoteAlbumBottomSheet(album: _album),
), ),
); );
} }

View File

@ -14,6 +14,7 @@ import 'package:immich_mobile/models/albums/album_search.model.dart';
import 'package:immich_mobile/pages/common/large_leading_tile.dart'; import 'package:immich_mobile/pages/common/large_leading_tile.dart';
import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart'; import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart';
import 'package:immich_mobile/providers/infrastructure/album.provider.dart'; import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
import 'package:immich_mobile/providers/infrastructure/current_album.provider.dart';
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
import 'package:immich_mobile/providers/user.provider.dart'; import 'package:immich_mobile/providers/user.provider.dart';
import 'package:immich_mobile/routing/router.dart'; import 'package:immich_mobile/routing/router.dart';
@ -578,6 +579,7 @@ class AddToAlbumHeader extends ConsumerWidget {
return; return;
} }
ref.read(currentRemoteAlbumProvider.notifier).setAlbum(newAlbum);
context.pushRoute(RemoteAlbumRoute(album: newAlbum)); context.pushRoute(RemoteAlbumRoute(album: newAlbum));
} }