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/rendering.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:fluttertoast/fluttertoast.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/collection_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/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_to_date_notifier.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/control_bottom_app_bar.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/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 'asset_grid_data_structure.dart'; | ||||
| @ -107,6 +107,8 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | ||||
|   final Set<Asset> _draggedAssets = | ||||
|       HashSet(equals: (a, b) => a.id == b.id, hashCode: (a) => a.id); | ||||
| 
 | ||||
|   ScrollPhysics? _scrollPhysics; | ||||
| 
 | ||||
|   Set<Asset> _getSelectedAssets() { | ||||
|     return Set.from(_selectedAssets); | ||||
|   } | ||||
| @ -265,6 +267,7 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | ||||
|       ), | ||||
|       itemBuilder: _itemBuilder, | ||||
|       itemPositionsListener: _itemPositionsListener, | ||||
|       physics: _scrollPhysics, | ||||
|       itemScrollController: _itemScrollController, | ||||
|       scrollOffsetController: _scrollOffsetController, | ||||
|       itemCount: widget.renderList.elements.length + | ||||
| @ -439,6 +442,7 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | ||||
| 
 | ||||
|   void _setDragStartIndex(AssetIndex index) { | ||||
|     setState(() { | ||||
|       _scrollPhysics = const ClampingScrollPhysics(); | ||||
|       _dragAnchorAssetIndex = index.rowIndex; | ||||
|       _dragAnchorSectionIndex = index.sectionIndex; | ||||
|       _dragging = true; | ||||
| @ -446,6 +450,12 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> { | ||||
|   } | ||||
| 
 | ||||
|   void _stopDrag() { | ||||
|     WidgetsBinding.instance.addPostFrameCallback((_) { | ||||
|       // Update the physics post frame to prevent sudden change in physics on iOS. | ||||
|       setState(() { | ||||
|         _scrollPhysics = null; | ||||
|       }); | ||||
|     }); | ||||
|     setState(() { | ||||
|       _dragging = false; | ||||
|       _draggedAssets.clear(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user