Skip to content

Commit

Permalink
Merge pull request #272 from woltapp/fix-rtl-for-slide-animation
Browse files Browse the repository at this point in the history
Fix: Consider directionality for pagination animation
  • Loading branch information
ulusoyca authored Jul 23, 2024
2 parents 0f4c556 + d5fab23 commit 64911e8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ class _MainContentAnimatedBuilderState
sheetWidth: widget.sheetWidth,
screenWidth: screenWidth,
isForwardMove: widget.forwardMove,
textDirection: Directionality.of(context),
),
child: widget.child,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Offset> 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<Offset>(
begin:
style.incomingMainContentSlideBeginOffset ?? incomingBeginOffset,
Expand All @@ -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<Offset>(
begin: style.outgoingMainContentSlideBeginOffset,
end: style.outgoingMainContentSlideEndOffset ?? outgoingEndOffset,
).animate(
CurvedAnimation(
parent: controller,
curve: style.mainContentIncomingSlidePositionCurve,
curve: style.mainContentOutgoingSlidePositionCurve,
),
);
}
Expand Down

0 comments on commit 64911e8

Please sign in to comment.