mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:39:37 -05:00 
			
		
		
		
	feat(mobile): share assets from album (#4821)
* share from album * fix case * enhance conditional array items
This commit is contained in:
		
							parent
							
								
									33ce2b7bba
								
							
						
					
					
						commit
						621eef0edc
					
				@ -23,6 +23,7 @@
 | 
				
			|||||||
  "album_viewer_appbar_share_err_title": "Failed to change album title",
 | 
					  "album_viewer_appbar_share_err_title": "Failed to change album title",
 | 
				
			||||||
  "album_viewer_appbar_share_leave": "Leave album",
 | 
					  "album_viewer_appbar_share_leave": "Leave album",
 | 
				
			||||||
  "album_viewer_appbar_share_remove": "Remove from album",
 | 
					  "album_viewer_appbar_share_remove": "Remove from album",
 | 
				
			||||||
 | 
					  "album_viewer_appbar_share_to": "Share To",
 | 
				
			||||||
  "album_viewer_page_share_add_users": "Add users",
 | 
					  "album_viewer_page_share_add_users": "Add users",
 | 
				
			||||||
  "all_people_page_title": "People",
 | 
					  "all_people_page_title": "People",
 | 
				
			||||||
  "all_videos_page_title": "Videos",
 | 
					  "all_videos_page_title": "Videos",
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,8 @@ import 'package:immich_mobile/modules/album/providers/album.provider.dart';
 | 
				
			|||||||
import 'package:immich_mobile/modules/album/providers/album_detail.provider.dart';
 | 
					import 'package:immich_mobile/modules/album/providers/album_detail.provider.dart';
 | 
				
			||||||
import 'package:immich_mobile/modules/album/providers/album_viewer.provider.dart';
 | 
					import 'package:immich_mobile/modules/album/providers/album_viewer.provider.dart';
 | 
				
			||||||
import 'package:immich_mobile/modules/album/providers/shared_album.provider.dart';
 | 
					import 'package:immich_mobile/modules/album/providers/shared_album.provider.dart';
 | 
				
			||||||
 | 
					import 'package:immich_mobile/shared/ui/share_dialog.dart';
 | 
				
			||||||
 | 
					import 'package:immich_mobile/shared/services/share.service.dart';
 | 
				
			||||||
import 'package:immich_mobile/routing/router.dart';
 | 
					import 'package:immich_mobile/routing/router.dart';
 | 
				
			||||||
import 'package:immich_mobile/shared/models/album.dart';
 | 
					import 'package:immich_mobile/shared/models/album.dart';
 | 
				
			||||||
import 'package:immich_mobile/shared/models/asset.dart';
 | 
					import 'package:immich_mobile/shared/models/asset.dart';
 | 
				
			||||||
@ -160,40 +162,77 @@ class AlbumViewerAppbar extends HookConsumerWidget
 | 
				
			|||||||
      ImmichLoadingOverlayController.appLoader.hide();
 | 
					      ImmichLoadingOverlayController.appLoader.hide();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    buildBottomSheetActionButton() {
 | 
					    void handleShareAssets(
 | 
				
			||||||
 | 
					      WidgetRef ref,
 | 
				
			||||||
 | 
					      BuildContext context,
 | 
				
			||||||
 | 
					      Set<Asset> selection,
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					      showDialog(
 | 
				
			||||||
 | 
					        context: context,
 | 
				
			||||||
 | 
					        builder: (BuildContext buildContext) {
 | 
				
			||||||
 | 
					          ref.watch(shareServiceProvider).shareAssets(selection.toList()).then(
 | 
				
			||||||
 | 
					            (bool status) {
 | 
				
			||||||
 | 
					              if (!status) {
 | 
				
			||||||
 | 
					                ImmichToast.show(
 | 
				
			||||||
 | 
					                  context: context,
 | 
				
			||||||
 | 
					                  msg: 'image_viewer_page_state_provider_share_error'.tr(),
 | 
				
			||||||
 | 
					                  toastType: ToastType.error,
 | 
				
			||||||
 | 
					                  gravity: ToastGravity.BOTTOM,
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					              Navigator.of(buildContext).pop();
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					          return const ShareDialog();
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        barrierDismissible: false,
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void onShareAssetsTo() async {
 | 
				
			||||||
 | 
					      ImmichLoadingOverlayController.appLoader.show();
 | 
				
			||||||
 | 
					      handleShareAssets(ref, context, selected);
 | 
				
			||||||
 | 
					      ImmichLoadingOverlayController.appLoader.hide();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    buildBottomSheetActions() {
 | 
				
			||||||
      if (selected.isNotEmpty) {
 | 
					      if (selected.isNotEmpty) {
 | 
				
			||||||
        if (album.ownerId == userId) {
 | 
					        return [
 | 
				
			||||||
          return ListTile(
 | 
					          ListTile(
 | 
				
			||||||
 | 
					            leading: const Icon(Icons.ios_share_rounded),
 | 
				
			||||||
 | 
					            title: const Text(
 | 
				
			||||||
 | 
					              'album_viewer_appbar_share_to',
 | 
				
			||||||
 | 
					              style: TextStyle(fontWeight: FontWeight.bold),
 | 
				
			||||||
 | 
					            ).tr(),
 | 
				
			||||||
 | 
					            onTap: () => onShareAssetsTo(),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          album.ownerId == userId ? ListTile(
 | 
				
			||||||
            leading: const Icon(Icons.delete_sweep_rounded),
 | 
					            leading: const Icon(Icons.delete_sweep_rounded),
 | 
				
			||||||
            title: const Text(
 | 
					            title: const Text(
 | 
				
			||||||
              'album_viewer_appbar_share_remove',
 | 
					              'album_viewer_appbar_share_remove',
 | 
				
			||||||
              style: TextStyle(fontWeight: FontWeight.bold),
 | 
					              style: TextStyle(fontWeight: FontWeight.bold),
 | 
				
			||||||
            ).tr(),
 | 
					            ).tr(),
 | 
				
			||||||
            onTap: () => onRemoveFromAlbumPressed(),
 | 
					            onTap: () => onRemoveFromAlbumPressed(),
 | 
				
			||||||
          );
 | 
					          ) : const SizedBox(),
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
          return const SizedBox();
 | 
					        return [
 | 
				
			||||||
        }
 | 
					          album.ownerId == userId ? ListTile(
 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        if (album.ownerId == userId) {
 | 
					 | 
				
			||||||
          return ListTile(
 | 
					 | 
				
			||||||
            leading: const Icon(Icons.delete_forever_rounded),
 | 
					            leading: const Icon(Icons.delete_forever_rounded),
 | 
				
			||||||
            title: const Text(
 | 
					            title: const Text(
 | 
				
			||||||
              'album_viewer_appbar_share_delete',
 | 
					              'album_viewer_appbar_share_delete',
 | 
				
			||||||
              style: TextStyle(fontWeight: FontWeight.bold),
 | 
					              style: TextStyle(fontWeight: FontWeight.bold),
 | 
				
			||||||
            ).tr(),
 | 
					            ).tr(),
 | 
				
			||||||
            onTap: () => onDeleteAlbumPressed(),
 | 
					            onTap: () => onDeleteAlbumPressed(),
 | 
				
			||||||
          );
 | 
					          ) : ListTile(
 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          return ListTile(
 | 
					 | 
				
			||||||
            leading: const Icon(Icons.person_remove_rounded),
 | 
					            leading: const Icon(Icons.person_remove_rounded),
 | 
				
			||||||
            title: const Text(
 | 
					            title: const Text(
 | 
				
			||||||
              'album_viewer_appbar_share_leave',
 | 
					              'album_viewer_appbar_share_leave',
 | 
				
			||||||
              style: TextStyle(fontWeight: FontWeight.bold),
 | 
					              style: TextStyle(fontWeight: FontWeight.bold),
 | 
				
			||||||
            ).tr(),
 | 
					            ).tr(),
 | 
				
			||||||
            onTap: () => onLeaveAlbumPressed(),
 | 
					            onTap: () => onLeaveAlbumPressed(),
 | 
				
			||||||
          );
 | 
					          ),
 | 
				
			||||||
        }
 | 
					        ];
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -257,7 +296,7 @@ class AlbumViewerAppbar extends HookConsumerWidget
 | 
				
			|||||||
              child: Column(
 | 
					              child: Column(
 | 
				
			||||||
                mainAxisSize: MainAxisSize.min,
 | 
					                mainAxisSize: MainAxisSize.min,
 | 
				
			||||||
                children: [
 | 
					                children: [
 | 
				
			||||||
                  buildBottomSheetActionButton(),
 | 
					                  ...buildBottomSheetActions(),
 | 
				
			||||||
                  if (selected.isEmpty && onAddPhotos != null) ...commonActions,
 | 
					                  if (selected.isEmpty && onAddPhotos != null) ...commonActions,
 | 
				
			||||||
                  if (selected.isEmpty &&
 | 
					                  if (selected.isEmpty &&
 | 
				
			||||||
                      onAddPhotos != null &&
 | 
					                      onAddPhotos != null &&
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user