mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 01:12:58 -04:00
feat(mobile): locate in timeline (#16722)
* feat(mobile): view in timeline * fix: throwing error on scroll * only show option if not in photos tab
This commit is contained in:
parent
6da77600e5
commit
bdabea4030
@ -332,7 +332,7 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index != -1 && index < widget.renderList.elements.length) {
|
if (index < widget.renderList.elements.length) {
|
||||||
// Not sure why the index is shifted, but it works. :3
|
// Not sure why the index is shifted, but it works. :3
|
||||||
_scrollToIndex(index + 1);
|
_scrollToIndex(index + 1);
|
||||||
} else {
|
} else {
|
||||||
|
@ -5,6 +5,8 @@ import 'package:fluttertoast/fluttertoast.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/providers/album/current_album.provider.dart';
|
import 'package:immich_mobile/providers/album/current_album.provider.dart';
|
||||||
import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
|
import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/asset_viewer/scroll_to_date_notifier.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/tab.provider.dart';
|
||||||
import 'package:immich_mobile/widgets/album/add_to_album_bottom_sheet.dart';
|
import 'package:immich_mobile/widgets/album/add_to_album_bottom_sheet.dart';
|
||||||
import 'package:immich_mobile/providers/asset_viewer/download.provider.dart';
|
import 'package:immich_mobile/providers/asset_viewer/download.provider.dart';
|
||||||
import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
|
import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
|
||||||
@ -95,6 +97,16 @@ class GalleryAppBar extends ConsumerWidget {
|
|||||||
ref.read(downloadStateProvider.notifier).downloadAsset(asset, context);
|
ref.read(downloadStateProvider.notifier).downloadAsset(asset, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleLocateAsset() async {
|
||||||
|
// Go back to the gallery
|
||||||
|
await context.maybePop();
|
||||||
|
await context
|
||||||
|
.navigateTo(const TabControllerRoute(children: [PhotosRoute()]));
|
||||||
|
ref.read(tabProvider.notifier).update((state) => state = TabEnum.home);
|
||||||
|
// Scroll to the asset's date
|
||||||
|
scrollToDateNotifierProvider.scrollToDate(asset.fileCreatedAt);
|
||||||
|
}
|
||||||
|
|
||||||
return IgnorePointer(
|
return IgnorePointer(
|
||||||
ignoring: !showControls,
|
ignoring: !showControls,
|
||||||
child: AnimatedOpacity(
|
child: AnimatedOpacity(
|
||||||
@ -107,6 +119,7 @@ class GalleryAppBar extends ConsumerWidget {
|
|||||||
isPartner: isPartner,
|
isPartner: isPartner,
|
||||||
asset: asset,
|
asset: asset,
|
||||||
onMoreInfoPressed: showInfo,
|
onMoreInfoPressed: showInfo,
|
||||||
|
onLocatePressed: handleLocateAsset,
|
||||||
onFavorite: toggleFavorite,
|
onFavorite: toggleFavorite,
|
||||||
onRestorePressed: () => handleRestore(asset),
|
onRestorePressed: () => handleRestore(asset),
|
||||||
onUploadPressed: asset.isLocal ? () => handleUpload(asset) : null,
|
onUploadPressed: asset.isLocal ? () => handleUpload(asset) : null,
|
||||||
|
@ -5,6 +5,7 @@ import 'package:immich_mobile/providers/activity_statistics.provider.dart';
|
|||||||
import 'package:immich_mobile/providers/album/current_album.provider.dart';
|
import 'package:immich_mobile/providers/album/current_album.provider.dart';
|
||||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||||
import 'package:immich_mobile/providers/asset.provider.dart';
|
import 'package:immich_mobile/providers/asset.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/tab.provider.dart';
|
||||||
import 'package:immich_mobile/widgets/asset_viewer/motion_photo_button.dart';
|
import 'package:immich_mobile/widgets/asset_viewer/motion_photo_button.dart';
|
||||||
|
|
||||||
class TopControlAppBar extends HookConsumerWidget {
|
class TopControlAppBar extends HookConsumerWidget {
|
||||||
@ -13,6 +14,7 @@ class TopControlAppBar extends HookConsumerWidget {
|
|||||||
required this.asset,
|
required this.asset,
|
||||||
required this.onMoreInfoPressed,
|
required this.onMoreInfoPressed,
|
||||||
required this.onDownloadPressed,
|
required this.onDownloadPressed,
|
||||||
|
required this.onLocatePressed,
|
||||||
required this.onAddToAlbumPressed,
|
required this.onAddToAlbumPressed,
|
||||||
required this.onRestorePressed,
|
required this.onRestorePressed,
|
||||||
required this.onFavorite,
|
required this.onFavorite,
|
||||||
@ -26,6 +28,7 @@ class TopControlAppBar extends HookConsumerWidget {
|
|||||||
final Function onMoreInfoPressed;
|
final Function onMoreInfoPressed;
|
||||||
final VoidCallback? onUploadPressed;
|
final VoidCallback? onUploadPressed;
|
||||||
final VoidCallback? onDownloadPressed;
|
final VoidCallback? onDownloadPressed;
|
||||||
|
final VoidCallback onLocatePressed;
|
||||||
final VoidCallback onAddToAlbumPressed;
|
final VoidCallback onAddToAlbumPressed;
|
||||||
final VoidCallback onRestorePressed;
|
final VoidCallback onRestorePressed;
|
||||||
final VoidCallback onActivitiesPressed;
|
final VoidCallback onActivitiesPressed;
|
||||||
@ -54,6 +57,18 @@ class TopControlAppBar extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget buildLocateButton() {
|
||||||
|
return IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
onLocatePressed();
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
Icons.image_search,
|
||||||
|
color: Colors.grey[200],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Widget buildMoreInfoButton() {
|
Widget buildMoreInfoButton() {
|
||||||
return IconButton(
|
return IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@ -159,6 +174,8 @@ class TopControlAppBar extends HookConsumerWidget {
|
|||||||
shape: const Border(),
|
shape: const Border(),
|
||||||
actions: [
|
actions: [
|
||||||
if (asset.isRemote && isOwner) buildFavoriteButton(a),
|
if (asset.isRemote && isOwner) buildFavoriteButton(a),
|
||||||
|
if (isOwner && ref.read(tabProvider.notifier).state != TabEnum.home)
|
||||||
|
buildLocateButton(),
|
||||||
if (asset.livePhotoVideoId != null) const MotionPhotoButton(),
|
if (asset.livePhotoVideoId != null) const MotionPhotoButton(),
|
||||||
if (asset.isLocal && !asset.isRemote) buildUploadButton(),
|
if (asset.isLocal && !asset.isRemote) buildUploadButton(),
|
||||||
if (asset.isRemote && !asset.isLocal && isOwner) buildDownloadButton(),
|
if (asset.isRemote && !asset.isLocal && isOwner) buildDownloadButton(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user