mirror of
https://github.com/immich-app/immich.git
synced 2024-12-19 00:32:49 +02:00
3e03f5348f
* fix:(mobile): spell error in top_control_app_bar.dart in function buildAddToAlbumButtom * fix(mobile): add restore button to individual image view of trashed assets * formatting
127 lines
4.3 KiB
Dart
127 lines
4.3 KiB
Dart
import 'package:auto_route/auto_route.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/modules/album/providers/current_album.provider.dart';
|
|
import 'package:immich_mobile/modules/album/ui/add_to_album_bottom_sheet.dart';
|
|
import 'package:immich_mobile/modules/asset_viewer/providers/image_viewer_page_state.provider.dart';
|
|
import 'package:immich_mobile/modules/asset_viewer/providers/show_controls.provider.dart';
|
|
import 'package:immich_mobile/modules/asset_viewer/ui/top_control_app_bar.dart';
|
|
import 'package:immich_mobile/modules/backup/providers/manual_upload.provider.dart';
|
|
import 'package:immich_mobile/modules/trash/providers/trashed_asset.provider.dart';
|
|
import 'package:immich_mobile/modules/home/ui/upload_dialog.dart';
|
|
import 'package:immich_mobile/modules/partner/providers/partner.provider.dart';
|
|
import 'package:immich_mobile/routing/router.dart';
|
|
import 'package:immich_mobile/shared/models/asset.dart';
|
|
import 'package:immich_mobile/shared/providers/asset.provider.dart';
|
|
import 'package:immich_mobile/shared/providers/user.provider.dart';
|
|
import 'package:immich_mobile/shared/ui/immich_toast.dart';
|
|
|
|
class GalleryAppBar extends ConsumerWidget {
|
|
final Asset asset;
|
|
final void Function() showInfo;
|
|
final void Function() onToggleMotionVideo;
|
|
final bool isPlayingVideo;
|
|
|
|
const GalleryAppBar({
|
|
super.key,
|
|
required this.asset,
|
|
required this.showInfo,
|
|
required this.onToggleMotionVideo,
|
|
required this.isPlayingVideo,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final album = ref.watch(currentAlbumProvider);
|
|
final isOwner = asset.ownerId == ref.watch(currentUserProvider)?.isarId;
|
|
|
|
final isPartner = ref
|
|
.watch(partnerSharedWithProvider)
|
|
.map((e) => e.isarId)
|
|
.contains(asset.ownerId);
|
|
|
|
toggleFavorite(Asset asset) =>
|
|
ref.read(assetProvider.notifier).toggleFavorite([asset]);
|
|
|
|
handleActivities() {
|
|
if (album != null && album.shared && album.remoteId != null) {
|
|
context.pushRoute(const ActivitiesRoute());
|
|
}
|
|
}
|
|
|
|
handleRestore(Asset asset) async {
|
|
final result = await ref.read(trashProvider.notifier).restoreAsset(asset);
|
|
|
|
if (result && context.mounted) {
|
|
ImmichToast.show(
|
|
context: context,
|
|
msg: 'asset restored successfully',
|
|
gravity: ToastGravity.BOTTOM,
|
|
);
|
|
}
|
|
}
|
|
|
|
handleUpload(Asset asset) {
|
|
showDialog(
|
|
context: context,
|
|
builder: (BuildContext _) {
|
|
return UploadDialog(
|
|
onUpload: () {
|
|
ref
|
|
.read(manualUploadProvider.notifier)
|
|
.uploadAssets(context, [asset]);
|
|
},
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
addToAlbum(Asset addToAlbumAsset) {
|
|
showModalBottomSheet(
|
|
elevation: 0,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(15.0),
|
|
),
|
|
context: context,
|
|
builder: (BuildContext _) {
|
|
return AddToAlbumBottomSheet(
|
|
assets: [addToAlbumAsset],
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
return IgnorePointer(
|
|
ignoring: !ref.watch(showControlsProvider),
|
|
child: AnimatedOpacity(
|
|
duration: const Duration(milliseconds: 100),
|
|
opacity: ref.watch(showControlsProvider) ? 1.0 : 0.0,
|
|
child: Container(
|
|
color: Colors.black.withOpacity(0.4),
|
|
child: TopControlAppBar(
|
|
isOwner: isOwner,
|
|
isPartner: isPartner,
|
|
isPlayingMotionVideo: isPlayingVideo,
|
|
asset: asset,
|
|
onMoreInfoPressed: showInfo,
|
|
onFavorite: toggleFavorite,
|
|
onRestorePressed: () => handleRestore(asset),
|
|
onUploadPressed: asset.isLocal ? () => handleUpload(asset) : null,
|
|
onDownloadPressed: asset.isLocal
|
|
? null
|
|
: () =>
|
|
ref.read(imageViewerStateProvider.notifier).downloadAsset(
|
|
asset,
|
|
context,
|
|
),
|
|
onToggleMotionVideo: onToggleMotionVideo,
|
|
onAddToAlbumPressed: () => addToAlbum(asset),
|
|
onActivitiesPressed: handleActivities,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|