refactor: improve _onEndAnimation legibility

This commit is contained in:
ricardodalarme 2024-01-09 15:07:06 -03:00
parent 3bf329de34
commit bfd9185284
1 changed files with 34 additions and 24 deletions

View File

@ -409,35 +409,45 @@ class _CardSwiperState<T extends Widget> extends State<CardSwiper>
} }
void _onEndAnimation() { void _onEndAnimation() {
if (_cardAnimation.left.abs() > widget.threshold) { final direction = _getEndAnimationDirection();
final direction = _cardAnimation.left.isNegative final isValidDirection = this._isValidDirection(direction);
? CardSwiperDirection.left
: CardSwiperDirection.right; if (isValidDirection) {
if (direction == CardSwiperDirection.left && _swipe(direction);
widget.allowedSwipeDirection.left ||
direction == CardSwiperDirection.right &&
widget.allowedSwipeDirection.right) {
_swipe(direction);
} else {
_goBack();
}
} else if (_cardAnimation.top.abs() > widget.threshold) {
final direction = _cardAnimation.top.isNegative
? CardSwiperDirection.top
: CardSwiperDirection.bottom;
if (direction == CardSwiperDirection.top &&
widget.allowedSwipeDirection.up ||
direction == CardSwiperDirection.bottom &&
widget.allowedSwipeDirection.down) {
_swipe(direction);
} else {
_goBack();
}
} else { } else {
_goBack(); _goBack();
} }
} }
CardSwiperDirection _getEndAnimationDirection() {
if (_cardAnimation.left.abs() > widget.threshold) {
return _cardAnimation.left.isNegative
? CardSwiperDirection.left
: CardSwiperDirection.right;
}
if (_cardAnimation.top.abs() > widget.threshold) {
return _cardAnimation.top.isNegative
? CardSwiperDirection.top
: CardSwiperDirection.bottom;
}
return CardSwiperDirection.none;
}
bool _isValidDirection(CardSwiperDirection direction) {
switch (direction) {
case CardSwiperDirection.left:
return widget.allowedSwipeDirection.left;
case CardSwiperDirection.right:
return widget.allowedSwipeDirection.right;
case CardSwiperDirection.top:
return widget.allowedSwipeDirection.up;
case CardSwiperDirection.bottom:
return widget.allowedSwipeDirection.down;
default:
return false;
}
}
void _swipe(CardSwiperDirection direction) { void _swipe(CardSwiperDirection direction) {
if (_currentIndex == null) return; if (_currentIndex == null) return;
_swipeType = SwipeType.swipe; _swipeType = SwipeType.swipe;