mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:27:09 -05: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