mirror of
https://github.com/immich-app/immich.git
synced 2025-05-31 12:15:47 -04: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 {
|
];
|
||||||
return const SizedBox();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (album.ownerId == userId) {
|
return [
|
||||||
return ListTile(
|
album.ownerId == userId ? 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