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