diff --git a/lib/src/content/components/paginating_group/main_content_animated_builder.dart b/lib/src/content/components/paginating_group/main_content_animated_builder.dart index 8c50c622..30057f13 100644 --- a/lib/src/content/components/paginating_group/main_content_animated_builder.dart +++ b/lib/src/content/components/paginating_group/main_content_animated_builder.dart @@ -77,6 +77,7 @@ class _MainContentAnimatedBuilderState sheetWidth: widget.sheetWidth, screenWidth: screenWidth, isForwardMove: widget.forwardMove, + textDirection: Directionality.of(context), ), child: widget.child, ), diff --git a/lib/src/content/components/paginating_group/wolt_modal_sheet_page_transition_state.dart b/lib/src/content/components/paginating_group/wolt_modal_sheet_page_transition_state.dart index 758032f6..43a08ec5 100644 --- a/lib/src/content/components/paginating_group/wolt_modal_sheet_page_transition_state.dart +++ b/lib/src/content/components/paginating_group/wolt_modal_sheet_page_transition_state.dart @@ -60,17 +60,24 @@ enum WoltModalSheetPageTransitionState { } } + /// Returns an animation for the main content slide position based on the + /// provided parameters, supporting both LTR and RTL directions. Animation mainContentSlidePosition( AnimationController controller, WoltModalSheetPaginationAnimationStyle style, { required double sheetWidth, required double screenWidth, required bool isForwardMove, + required TextDirection textDirection, }) { + final directionMultiplier = (textDirection == TextDirection.ltr ? 1 : -1) * + (isForwardMove ? 1 : -1); + switch (this) { case WoltModalSheetPageTransitionState.incoming: - final incomingBeginOffset = Offset( - sheetWidth * 0.3 * (isForwardMove ? 1 : -1) / screenWidth, 0); + final incomingBeginOffset = + Offset(sheetWidth * 0.3 * directionMultiplier / screenWidth, 0); + return Tween( begin: style.incomingMainContentSlideBeginOffset ?? incomingBeginOffset, @@ -81,16 +88,18 @@ enum WoltModalSheetPageTransitionState { curve: style.mainContentIncomingSlidePositionCurve, ), ); + case WoltModalSheetPageTransitionState.outgoing: - final outgoingEndOffset = Offset( - sheetWidth * 0.3 * (isForwardMove ? -1 : 1) / screenWidth, 0); + final outgoingEndOffset = + Offset(sheetWidth * 0.3 * -directionMultiplier / screenWidth, 0); + return Tween( begin: style.outgoingMainContentSlideBeginOffset, end: style.outgoingMainContentSlideEndOffset ?? outgoingEndOffset, ).animate( CurvedAnimation( parent: controller, - curve: style.mainContentIncomingSlidePositionCurve, + curve: style.mainContentOutgoingSlidePositionCurve, ), ); }