mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	feat: swipe to delete album (#20765)
This commit is contained in:
		
							parent
							
								
									f09bed9ad2
								
							
						
					
					
						commit
						24db881c14
					
				@ -19,6 +19,7 @@ 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';
 | 
				
			||||||
import 'package:immich_mobile/utils/remote_album.utils.dart';
 | 
					import 'package:immich_mobile/utils/remote_album.utils.dart';
 | 
				
			||||||
 | 
					import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
 | 
				
			||||||
import 'package:immich_mobile/widgets/common/immich_toast.dart';
 | 
					import 'package:immich_mobile/widgets/common/immich_toast.dart';
 | 
				
			||||||
import 'package:immich_mobile/widgets/common/search_field.dart';
 | 
					import 'package:immich_mobile/widgets/common/search_field.dart';
 | 
				
			||||||
import 'package:sliver_tools/sliver_tools.dart';
 | 
					import 'package:sliver_tools/sliver_tools.dart';
 | 
				
			||||||
@ -423,10 +424,7 @@ class _AlbumList extends ConsumerWidget {
 | 
				
			|||||||
      sliver: SliverList.builder(
 | 
					      sliver: SliverList.builder(
 | 
				
			||||||
        itemBuilder: (_, index) {
 | 
					        itemBuilder: (_, index) {
 | 
				
			||||||
          final album = albums[index];
 | 
					          final album = albums[index];
 | 
				
			||||||
 | 
					          final albumTile = LargeLeadingTile(
 | 
				
			||||||
          return Padding(
 | 
					 | 
				
			||||||
            padding: const EdgeInsets.only(bottom: 8.0),
 | 
					 | 
				
			||||||
            child: LargeLeadingTile(
 | 
					 | 
				
			||||||
            title: Text(
 | 
					            title: Text(
 | 
				
			||||||
              album.name,
 | 
					              album.name,
 | 
				
			||||||
              maxLines: 2,
 | 
					              maxLines: 2,
 | 
				
			||||||
@ -457,9 +455,42 @@ class _AlbumList extends ConsumerWidget {
 | 
				
			|||||||
                      child: const Icon(Icons.photo_album_rounded, size: 24, color: Colors.grey),
 | 
					                      child: const Icon(Icons.photo_album_rounded, size: 24, color: Colors.grey),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					          final isOwner = album.ownerId == userId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if (isOwner) {
 | 
				
			||||||
 | 
					            return Padding(
 | 
				
			||||||
 | 
					              padding: const EdgeInsets.only(bottom: 8.0),
 | 
				
			||||||
 | 
					              child: Dismissible(
 | 
				
			||||||
 | 
					                key: ValueKey(album.id),
 | 
				
			||||||
 | 
					                background: Container(
 | 
				
			||||||
 | 
					                  color: context.colorScheme.error,
 | 
				
			||||||
 | 
					                  alignment: Alignment.centerRight,
 | 
				
			||||||
 | 
					                  padding: const EdgeInsets.only(right: 16),
 | 
				
			||||||
 | 
					                  child: Icon(Icons.delete, color: context.colorScheme.onError),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                direction: DismissDirection.endToStart,
 | 
				
			||||||
 | 
					                confirmDismiss: (direction) {
 | 
				
			||||||
 | 
					                  return showDialog<bool>(
 | 
				
			||||||
 | 
					                    context: context,
 | 
				
			||||||
 | 
					                    builder: (context) => ConfirmDialog(
 | 
				
			||||||
 | 
					                      onOk: () => true,
 | 
				
			||||||
 | 
					                      title: "delete_album".t(context: context),
 | 
				
			||||||
 | 
					                      content: "album_delete_confirmation".t(context: context, args: {'album': album.name}),
 | 
				
			||||||
 | 
					                      ok: "delete".t(context: context),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                  );
 | 
					                  );
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
 | 
					                onDismissed: (direction) async {
 | 
				
			||||||
 | 
					                  await ref.read(remoteAlbumProvider.notifier).deleteAlbum(album.id);
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                child: albumTile,
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            return Padding(padding: const EdgeInsets.only(bottom: 8.0), child: albumTile);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        itemCount: albums.length,
 | 
					        itemCount: albums.length,
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user