swipe_deck
is a Flutter package for a Tinder Card Swiper. ✨
It allows swiping in all directions with any widget as a card.
Very smooth animations supporting Android, iOS & WebApp.
You can now trigger swipe up and swipe down with our SwipeDeckController
regardless of the chosen SwipeDirection
(which is still used when swipe
is called through the controller). Just like the swipeLeft and swipeRight call, you can call swipeUp
or swipeDown
through the controller anywhere you want.
You can now restrict the swipe in either horizontal directions or vertical directions using swipeOptions
property.
Now you can set the loop
property to true
and make the list infinitely scrollable.
In this version we have replaced the list of cards with cardsBuilder
. Now the widget only renders two cards at a time which makes it lightweight and scalable. So you can perform operations on your card anytime.
Trigger swipe right and swipe left however you want...
Unswipe the cards however you want...
Customize the angle...
Customize the threshold of the swiper, when the card should slide away...
Create a new project with the command
flutter create MyApp
Add
swipe_deck: ...
to your pubspec.yaml
of your flutter project.
OR
run
flutter pub add swipe_deck
in your project's root directory.
In your library add the following import:
import 'package:swipe_deck/swipe_deck.dart';
For help getting started with Flutter, view the online documentation.
You can place your SwipeDeck
inside of a Scaffold
or CupertinoPageScaffold
like we did here. Optional parameters can be defined to enable different features. See the following example..
import 'package:swipe_deck/swipe_deck.dart';
import 'package:flutter/cupertino.dart';
class Example extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
child: SizedBox(
height: MediaQuery.of(context).size.height * 0.75,
child: SwipeDeck(
cardsCount: 10,
cardsBuilder: (BuildContext context,int index){
return Container(
alignment: Alignment.center,
child: const Text(index.toString()),
color: CupertinoColors.activeBlue,
);
},
),
),
);
}
}
Parameter | Default | Description | Required |
---|---|---|---|
cardsCount | - | Number of cards you want to render | true |
cardsBuilder | - | Callback of the type CardsBuilder | true |
swipeDirections | allDirections | restrict swipe directions to vertical, horizontal, or allow all directions | false |
lockDragToSwipeDirections | false | if set to true, card can only be dragged in value of swipeDirections | false |
controller | - | Trigger unswipe | false |
padding | EdgeInsets.symmetric(horizontal: 20, vertical: 25) | Control swiper padding | false |
duration | 200 milliseconds | The duration that every animation should last | false |
maxAngle | 30 | Maximum angle the card reaches while swiping | false |
threshold | 50 | Threshold from which the card is swiped away | false |
isDisabled | false | Set to true if swiping should be disabled, has no impact when triggered from the outside |
false |
onTapDisabled | - | Function that get triggered when the swiper is disabled | false |
onSwipe | - | Called with the new index and detected swipe direction when the user swiped | false |
onEnd | - | Called when there is no Widget left to be swiped away | false |
direction | right | Direction in which the card is swiped away when triggered from the outside | false |
allowUnswipe | true | Set to false if unswipe should be disabled away |
false |
unlimitedUnswipe | false | Set to true if the user can unswipe as many cards as possible |
false |
unswipe | - | Called with the boolean true when the last card gets unswiped and with the boolean false if there is no card to unswipe |
false |
onDrag | null | A callback when dragging: (double x, double y) | false |
onDragEnd | null | A callback when dragging ends | false |
foregroundItemWrapper | null | Wrap your foreground item: (child, direction, x, y), should return a Widget | false |
backgroundItemWrapper | null | Wrap your background item: (child), should return a Widget | false |
emptyCardsWidget | null | A widget to be shown when list contains no more cards | false |
initialIndex | 0 | The initial card to show | false |
initialSwipeMemo | {} | A map of the initial swipe memo - used if initialIndex is above 0 | false |
The Controller
is used to control the swipe
, swipeLeft
, swipeRight
, swipeUp
, swipeDown
or unswipe
function of the swiper from outside of the widget. You can create a controller called SwipeDeckController
and save the instance for further usage. Please have a closer look to our Example for the usage.
Method | Description |
---|---|
swipe | Changes the state of the controller to swipe and swipes the card in your selected direction. |
swipeLeft | Changes the state of the controller to swipe left and swipes the card to the left side. |
swipeRight | Changes the state of the controller to swipe right and swipes the card to the right side. |
swipeUp | Changes the state of the controller to swipe up and swipes the card to the up side. |
swipeDown | Changes the state of the controller to swipe down and swipes the card to the down side. |
unswipe | Changes the state of the controller to unswipe and brings back the last card that was swiped away. |
- Mattias Fjellvang (package maintainer)
- Appinio GmbH (original project creator)