From 2f962783112736d8c15f6daa5dd51eb39471110a Mon Sep 17 00:00:00 2001 From: Arin Faraj Date: Mon, 24 Feb 2025 13:09:49 +0300 Subject: [PATCH] fix hero animation when drag-dismissing WoltModalSheet - Refactor drag handling logic for vertical and horizontal dismissals - Add minimum value check to prevent unintended dismissals - Use pattern matching for vertical drag direction - Ensure consistent animation controller value updates --- ..._modal_sheet_drag_to_dismiss_detector.dart | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/src/widgets/wolt_modal_sheet_drag_to_dismiss_detector.dart b/lib/src/widgets/wolt_modal_sheet_drag_to_dismiss_detector.dart index d0e584dc..91b2c087 100644 --- a/lib/src/widgets/wolt_modal_sheet_drag_to_dismiss_detector.dart +++ b/lib/src/widgets/wolt_modal_sheet_drag_to_dismiss_detector.dart @@ -86,16 +86,14 @@ class WoltModalSheetDragToDismissDetector extends StatelessWidget { } final deltaDiff = details.primaryDelta! / _childHeight; - - switch (_dismissDirection) { - case WoltModalDismissDirection.down: - _animationController.value -= deltaDiff; - break; - case WoltModalDismissDirection.up: - _animationController.value += deltaDiff; - break; - default: - break; + final newValue = switch (_dismissDirection) { + WoltModalDismissDirection.down => _animationController.value - deltaDiff, + WoltModalDismissDirection.up => _animationController.value + deltaDiff, + _ => _animationController.value, + }; + + if (newValue >= 0.01) { + _animationController.value = newValue; } } @@ -157,24 +155,30 @@ class WoltModalSheetDragToDismissDetector extends StatelessWidget { } final delta = -details.primaryDelta! / _childWidth; + double newValue = _animationController.value; + switch (_dismissDirection) { case WoltModalDismissDirection.startToEnd: if (Directionality.of(context) == TextDirection.ltr) { - _animationController.value -= delta; + newValue -= delta; } else { - _animationController.value += delta; + newValue += delta; } break; case WoltModalDismissDirection.endToStart: if (Directionality.of(context) == TextDirection.ltr) { - _animationController.value += delta; + newValue += delta; } else { - _animationController.value -= delta; + newValue -= delta; } break; default: break; } + + if (newValue >= 0.01) { + _animationController.value = newValue; + } } void _handleHorizontalDragEnd(BuildContext context, DragEndDetails details) {