Flutter卡片滑动匹配插件flutter_tindercard的使用
Flutter卡片滑动匹配插件flutter_tindercard的使用
flutter_tindercard
Tinder/TanTan Card Widget.
截图
开始使用
-
在
pubspec.yaml
文件中添加依赖:dependencies: flutter_tindercard: ^0.1.7
-
导入包:
import 'package:flutter_tindercard/flutter_tindercard.dart';
-
在布局中添加
TinderSwapCard
,并编写单个卡片的布局构建器,即可获得类似探探的滑动卡片组件。 -
使用
CardSwipeCompleteCallback
获取滑动方向和索引。 -
使用
CardController
从外部触发滑动。在TinderSwapCard
中初始化一个CardController
参数,并调用其triggerLeft
或triggerRight
方法来触发滑动。 -
使用
CardDragUpdateCallback
获取正在滑动的卡片的详细信息。
示例
查看完整示例代码 这里。
示例代码
import 'package:flutter/material.dart';
import 'package:flutter_tindercard/flutter_tindercard.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// 这是应用的根部件。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ExampleHomePage(),
);
}
}
class ExampleHomePage extends StatefulWidget {
[@override](/user/override)
_ExampleHomePageState createState() => _ExampleHomePageState();
}
class _ExampleHomePageState extends State<ExampleHomePage> with TickerProviderStateMixin {
List<String> welcomeImages = [
"assets/welcome0.png",
"assets/welcome1.png",
"assets/welcome2.png",
"assets/welcome2.png",
"assets/welcome1.png",
"assets/welcome1.png"
];
[@override](/user/override)
Widget build(BuildContext context) {
CardController controller; // 用于触发滑动。
return new Scaffold(
body: new Center(
child: Container(
height: MediaQuery.of(context).size.height * 0.6,
child: new TinderSwapCard(
swipeUp: true, // 允许向上滑动
swipeDown: true, // 允许向下滑动
orientation: AmassOrientation.BOTTOM, // 设置卡片的底部对齐方式
totalNum: welcomeImages.length, // 总卡片数量
stackNum: 3, // 卡片堆叠数量
swipeEdge: 4.0, // 滑动边缘距离
maxWidth: MediaQuery.of(context).size.width * 0.9, // 最大宽度
maxHeight: MediaQuery.of(context).size.width * 0.9, // 最大高度
minWidth: MediaQuery.of(context).size.width * 0.8, // 最小宽度
minHeight: MediaQuery.of(context).size.width * 0.8, // 最小高度
cardBuilder: (context, index) => Card(
child: Image.asset('${welcomeImages[index]}'), // 构建每个卡片的图片
),
cardController: controller = CardController(), // 初始化控制器
swipeUpdateCallback: (DragUpdateDetails details, Alignment align) {
/// 获取滑动卡片的方向
if (align.x < 0) {
// 卡片向左滑动
} else if (align.x > 0) {
// 卡片向右滑动
}
},
swipeCompleteCallback: (CardSwipeOrientation orientation, int index) {
/// 获取滑动完成后的方向和索引
},
),
),
),
);
}
}
更多关于Flutter卡片滑动匹配插件flutter_tindercard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter卡片滑动匹配插件flutter_tindercard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_tindercard
是一个用于实现类似 Tinder 卡片滑动效果的 Flutter 插件。它可以让你轻松地在应用中实现卡片的滑动、匹配和取消匹配等功能。以下是如何使用 flutter_tindercard
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_tindercard
依赖:
dependencies:
flutter:
sdk: flutter
flutter_tindercard: ^0.0.1
然后运行 flutter pub get
来安装依赖。
2. 基本使用
以下是一个简单的示例,展示如何使用 flutter_tindercard
插件来实现卡片滑动效果:
import 'package:flutter/material.dart';
import 'package:flutter_tindercard/flutter_tindercard.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Tinder Card Demo'),
),
body: Center(
child: TinderCardDemo(),
),
),
);
}
}
class TinderCardDemo extends StatefulWidget {
@override
_TinderCardDemoState createState() => _TinderCardDemoState();
}
class _TinderCardDemoState extends State<TinderCardDemo> {
List<String> cards = [
'Card 1',
'Card 2',
'Card 3',
'Card 4',
'Card 5',
];
@override
Widget build(BuildContext context) {
return TinderSwapCard(
orientation: AmassOrientation.BOTTOM,
totalNum: cards.length,
stackNum: 3,
swipeEdge: 4.0,
maxWidth: MediaQuery.of(context).size.width * 0.9,
maxHeight: MediaQuery.of(context).size.height * 0.7,
minWidth: MediaQuery.of(context).size.width * 0.8,
minHeight: MediaQuery.of(context).size.height * 0.6,
cardBuilder: (context, index) => Card(
child: Center(
child: Text(
cards[index],
style: TextStyle(fontSize: 24.0),
),
),
),
swipeUpdateCallback: (DragUpdateDetails details, Alignment align) {
// 滑动过程中的回调
if (align.x < 0) {
// 向左滑动
} else if (align.x > 0) {
// 向右滑动
}
},
swipeCompleteCallback: (CardSwipeOrientation orientation, int index) {
// 滑动完成的回调
if (orientation == CardSwipeOrientation.LEFT) {
// 向左滑动完成
} else if (orientation == CardSwipeOrientation.RIGHT) {
// 向右滑动完成
}
},
);
}
}
3. 参数说明
orientation
: 卡片堆叠的方向,可以是AmassOrientation.TOP
或AmassOrientation.BOTTOM
。totalNum
: 卡片的总数。stackNum
: 同时显示的卡片数量。swipeEdge
: 滑动的边界,表示卡片需要滑动多少距离才会触发滑动完成。maxWidth
和maxHeight
: 卡片的最大宽度和高度。minWidth
和minHeight
: 卡片的最小宽度和高度。cardBuilder
: 构建卡片的回调函数,返回一个Widget
。swipeUpdateCallback
: 滑动过程中的回调,可以获取当前的滑动方向和距离。swipeCompleteCallback
: 滑动完成后的回调,可以获取滑动的方向和卡片的索引。
4. 自定义卡片样式
你可以通过 cardBuilder
回调函数来自定义卡片的样式。例如,你可以在卡片中添加图片、按钮等元素。
cardBuilder: (context, index) => Card(
child: Column(
children: [
Image.network('https://picsum.photos/200/300'),
Text(
cards[index],
style: TextStyle(fontSize: 24.0),
),
ElevatedButton(
onPressed: () {
// 按钮点击事件
},
child: Text('Click Me'),
),
],
),
),
5. 处理滑动事件
你可以通过 swipeUpdateCallback
和 swipeCompleteCallback
来处理滑动事件。例如,你可以根据滑动的方向来执行不同的操作。
swipeCompleteCallback: (CardSwipeOrientation orientation, int index) {
if (orientation == CardSwipeOrientation.LEFT) {
print('Card $index swiped left');
} else if (orientation == CardSwipeOrientation.RIGHT) {
print('Card $index swiped right');
}
},