mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:37:11 -04:00 
			
		
		
		
	fix(mobile): asset grid will infinitely scroll on iOS when select and… (#17469)
fix(mobile): asset grid will infinitely scroll on iOS when select and drag
This commit is contained in:
		
							parent
							
								
									cf2c0260a6
								
							
						
					
					
						commit
						04b03f2924
					
				| @ -8,25 +8,25 @@ import 'package:easy_localization/easy_localization.dart'; | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:flutter/rendering.dart'; | import 'package:flutter/rendering.dart'; | ||||||
| import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||||
|  | import 'package:fluttertoast/fluttertoast.dart'; | ||||||
| import 'package:hooks_riverpod/hooks_riverpod.dart'; | import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||||
|  | import 'package:immich_mobile/entities/asset.entity.dart'; | ||||||
| import 'package:immich_mobile/extensions/build_context_extensions.dart'; | import 'package:immich_mobile/extensions/build_context_extensions.dart'; | ||||||
| import 'package:immich_mobile/extensions/collection_extensions.dart'; | import 'package:immich_mobile/extensions/collection_extensions.dart'; | ||||||
| import 'package:immich_mobile/extensions/theme_extensions.dart'; | import 'package:immich_mobile/extensions/theme_extensions.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/is_motion_video_playing.provider.dart'; | import 'package:immich_mobile/providers/asset_viewer/is_motion_video_playing.provider.dart'; | ||||||
| import 'package:immich_mobile/providers/asset_viewer/scroll_notifier.provider.dart'; | import 'package:immich_mobile/providers/asset_viewer/scroll_notifier.provider.dart'; | ||||||
|  | import 'package:immich_mobile/providers/asset_viewer/scroll_to_date_notifier.provider.dart'; | ||||||
| import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart'; | import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart'; | ||||||
|  | import 'package:immich_mobile/providers/haptic_feedback.provider.dart'; | ||||||
|  | import 'package:immich_mobile/providers/tab.provider.dart'; | ||||||
|  | import 'package:immich_mobile/routing/router.dart'; | ||||||
| import 'package:immich_mobile/widgets/asset_grid/asset_drag_region.dart'; | import 'package:immich_mobile/widgets/asset_grid/asset_drag_region.dart'; | ||||||
|  | import 'package:immich_mobile/widgets/asset_grid/control_bottom_app_bar.dart'; | ||||||
| import 'package:immich_mobile/widgets/asset_grid/thumbnail_image.dart'; | import 'package:immich_mobile/widgets/asset_grid/thumbnail_image.dart'; | ||||||
| import 'package:immich_mobile/widgets/asset_grid/thumbnail_placeholder.dart'; | import 'package:immich_mobile/widgets/asset_grid/thumbnail_placeholder.dart'; | ||||||
| import 'package:immich_mobile/widgets/common/immich_toast.dart'; | import 'package:immich_mobile/widgets/common/immich_toast.dart'; | ||||||
| import 'package:fluttertoast/fluttertoast.dart'; |  | ||||||
| import 'package:immich_mobile/widgets/asset_grid/control_bottom_app_bar.dart'; |  | ||||||
| import 'package:immich_mobile/routing/router.dart'; |  | ||||||
| import 'package:immich_mobile/entities/asset.entity.dart'; |  | ||||||
| import 'package:immich_mobile/providers/asset_viewer/scroll_to_date_notifier.provider.dart'; |  | ||||||
| import 'package:immich_mobile/providers/haptic_feedback.provider.dart'; |  | ||||||
| import 'package:immich_mobile/providers/tab.provider.dart'; |  | ||||||
| import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; | import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; | ||||||
| 
 | 
 | ||||||
| import 'asset_grid_data_structure.dart'; | import 'asset_grid_data_structure.dart'; | ||||||
| @ -107,6 +107,8 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | |||||||
|   final Set<Asset> _draggedAssets = |   final Set<Asset> _draggedAssets = | ||||||
|       HashSet(equals: (a, b) => a.id == b.id, hashCode: (a) => a.id); |       HashSet(equals: (a, b) => a.id == b.id, hashCode: (a) => a.id); | ||||||
| 
 | 
 | ||||||
|  |   ScrollPhysics? _scrollPhysics; | ||||||
|  | 
 | ||||||
|   Set<Asset> _getSelectedAssets() { |   Set<Asset> _getSelectedAssets() { | ||||||
|     return Set.from(_selectedAssets); |     return Set.from(_selectedAssets); | ||||||
|   } |   } | ||||||
| @ -265,6 +267,7 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | |||||||
|       ), |       ), | ||||||
|       itemBuilder: _itemBuilder, |       itemBuilder: _itemBuilder, | ||||||
|       itemPositionsListener: _itemPositionsListener, |       itemPositionsListener: _itemPositionsListener, | ||||||
|  |       physics: _scrollPhysics, | ||||||
|       itemScrollController: _itemScrollController, |       itemScrollController: _itemScrollController, | ||||||
|       scrollOffsetController: _scrollOffsetController, |       scrollOffsetController: _scrollOffsetController, | ||||||
|       itemCount: widget.renderList.elements.length + |       itemCount: widget.renderList.elements.length + | ||||||
| @ -439,6 +442,7 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | |||||||
| 
 | 
 | ||||||
|   void _setDragStartIndex(AssetIndex index) { |   void _setDragStartIndex(AssetIndex index) { | ||||||
|     setState(() { |     setState(() { | ||||||
|  |       _scrollPhysics = const ClampingScrollPhysics(); | ||||||
|       _dragAnchorAssetIndex = index.rowIndex; |       _dragAnchorAssetIndex = index.rowIndex; | ||||||
|       _dragAnchorSectionIndex = index.sectionIndex; |       _dragAnchorSectionIndex = index.sectionIndex; | ||||||
|       _dragging = true; |       _dragging = true; | ||||||
| @ -446,6 +450,12 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   void _stopDrag() { |   void _stopDrag() { | ||||||
|  |     WidgetsBinding.instance.addPostFrameCallback((_) { | ||||||
|  |       // Update the physics post frame to prevent sudden change in physics on iOS. | ||||||
|  |       setState(() { | ||||||
|  |         _scrollPhysics = null; | ||||||
|  |       }); | ||||||
|  |     }); | ||||||
|     setState(() { |     setState(() { | ||||||
|       _dragging = false; |       _dragging = false; | ||||||
|       _draggedAssets.clear(); |       _draggedAssets.clear(); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user