Skip to content

Commit 2190e8c

Browse files
gaganyadav80savely-krasovsky
authored andcommitted
fix(mobile): asset grid will infinitely scroll on iOS when select and… (immich-app#17469)
fix(mobile): asset grid will infinitely scroll on iOS when select and drag
1 parent 9ee7726 commit 2190e8c

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

mobile/lib/widgets/asset_grid/immich_asset_grid_view.dart

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,25 @@ import 'package:easy_localization/easy_localization.dart';
88
import 'package:flutter/material.dart';
99
import 'package:flutter/rendering.dart';
1010
import 'package:flutter/services.dart';
11+
import 'package:fluttertoast/fluttertoast.dart';
1112
import 'package:hooks_riverpod/hooks_riverpod.dart';
13+
import 'package:immich_mobile/entities/asset.entity.dart';
1214
import 'package:immich_mobile/extensions/build_context_extensions.dart';
1315
import 'package:immich_mobile/extensions/collection_extensions.dart';
1416
import 'package:immich_mobile/extensions/theme_extensions.dart';
1517
import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
1618
import 'package:immich_mobile/providers/asset_viewer/is_motion_video_playing.provider.dart';
1719
import 'package:immich_mobile/providers/asset_viewer/scroll_notifier.provider.dart';
20+
import 'package:immich_mobile/providers/asset_viewer/scroll_to_date_notifier.provider.dart';
1821
import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
22+
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
23+
import 'package:immich_mobile/providers/tab.provider.dart';
24+
import 'package:immich_mobile/routing/router.dart';
1925
import 'package:immich_mobile/widgets/asset_grid/asset_drag_region.dart';
26+
import 'package:immich_mobile/widgets/asset_grid/control_bottom_app_bar.dart';
2027
import 'package:immich_mobile/widgets/asset_grid/thumbnail_image.dart';
2128
import 'package:immich_mobile/widgets/asset_grid/thumbnail_placeholder.dart';
2229
import 'package:immich_mobile/widgets/common/immich_toast.dart';
23-
import 'package:fluttertoast/fluttertoast.dart';
24-
import 'package:immich_mobile/widgets/asset_grid/control_bottom_app_bar.dart';
25-
import 'package:immich_mobile/routing/router.dart';
26-
import 'package:immich_mobile/entities/asset.entity.dart';
27-
import 'package:immich_mobile/providers/asset_viewer/scroll_to_date_notifier.provider.dart';
28-
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
29-
import 'package:immich_mobile/providers/tab.provider.dart';
3030
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
3131

3232
import 'asset_grid_data_structure.dart';
@@ -107,6 +107,8 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> {
107107
final Set<Asset> _draggedAssets =
108108
HashSet(equals: (a, b) => a.id == b.id, hashCode: (a) => a.id);
109109

110+
ScrollPhysics? _scrollPhysics;
111+
110112
Set<Asset> _getSelectedAssets() {
111113
return Set.from(_selectedAssets);
112114
}
@@ -265,6 +267,7 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> {
265267
),
266268
itemBuilder: _itemBuilder,
267269
itemPositionsListener: _itemPositionsListener,
270+
physics: _scrollPhysics,
268271
itemScrollController: _itemScrollController,
269272
scrollOffsetController: _scrollOffsetController,
270273
itemCount: widget.renderList.elements.length +
@@ -439,13 +442,20 @@ class ImmichAssetGridViewState extends ConsumerState<ImmichAssetGridView> {
439442

440443
void _setDragStartIndex(AssetIndex index) {
441444
setState(() {
445+
_scrollPhysics = const ClampingScrollPhysics();
442446
_dragAnchorAssetIndex = index.rowIndex;
443447
_dragAnchorSectionIndex = index.sectionIndex;
444448
_dragging = true;
445449
});
446450
}
447451

448452
void _stopDrag() {
453+
WidgetsBinding.instance.addPostFrameCallback((_) {
454+
// Update the physics post frame to prevent sudden change in physics on iOS.
455+
setState(() {
456+
_scrollPhysics = null;
457+
});
458+
});
449459
setState(() {
450460
_dragging = false;
451461
_draggedAssets.clear();

0 commit comments

Comments
 (0)