Flutter卡片滑动插件swipe_cards的使用
Flutter卡片滑动插件swipe_cards的使用
安装
要在Flutter项目中安装swipe_cards
插件,请在pubspec.yaml
文件中添加以下依赖:
dependencies:
swipe_cards: ^2.0.0+1
使用方法
基本用法
以下是SwipeCards
的基本用法示例:
import 'package:swipe_cards/swipe_cards.dart';
SwipeCards(
matchEngine: <MatchEngine>, // 控制器实例
itemBuilder: (BuildContext context, int index) {}, // 卡片内容构建函数
onStackFinished: () {}, // 所有卡片被滑完后的回调函数
itemChanged: (SwipeItem item, int index) {}, // 卡片切换时的回调函数
upSwipeAllowed: <bool>, // 是否允许向上滑动
fillSpace: <bool>, // 是否填充空间
);
SwipeCards属性说明
属性 | 描述 |
---|---|
matchEngine |
MatchEngine 实例,用于手动触发滑动。 |
itemBuilder |
返回卡片内部视图的函数。 |
likeTag |
右滑/喜欢区域显示的小部件。 |
nopeTag |
左滑/不喜欢区域显示的小部件。 |
superLikeTag |
上滑/超级喜欢区域显示的小部件。 |
onStackFinished |
所有卡片都被滑完后触发的函数。 |
itemChanged |
当卡片堆栈中的卡片发生变化(切换到下一张卡片)时触发的函数。 |
leftSwipeAllowed |
启用/禁用左滑。(默认:true) |
rightSwipeAllowed |
启用/禁用右滑。(默认:true) |
upSwipeAllowed |
启用/禁用上滑。(默认:false) |
fillSpace |
配置是否填充空间。(默认:true) |
MatchEngine
MatchEngine
是滑动卡片的控制器。它接收swipeItems
作为参数,并可用于手动触发滑动,例如通过按钮按下触发。
MatchEngine _matchEngine = MatchEngine(swipeItems: List<SwipeItem>);
MatchEngine中的函数
函数 | 描述 |
---|---|
_matchEngine.currentItem.like(); |
手动触发右滑。 |
_matchEngine.currentItem.nope(); |
手动触发左滑。 |
_matchEngine.currentItem.superLike(); |
手动触发上滑。 |
SwipeItem
SwipeItem
包含可以在滑动卡片中渲染的实际数据。
SwipeItem(
content: "Anup Kumar Panwar",
likeAction: () {
log("Like");
},
nopeAction: () {
log("Nope");
},
superlikeAction: () {
log("Superlike");
},
onSlideUpdate: (SlideRegion? region){
log("Region $region");
}
);
SwipeItem属性说明
属性 | 描述 |
---|---|
content |
包含要在滑动卡片中渲染的实际数据的对象。 |
likeAction |
卡片被喜欢时触发的函数。 |
nopeAction |
卡片被不喜欢/左滑时触发的函数。 |
superlikeAction |
卡片被超级喜欢时触发的函数。 |
onSlideUpdate |
卡片被拖动时触发的函数,提供当前卡片所在区域的信息。 |
示例代码
以下是一个完整的示例代码,展示了如何使用swipe_cards
插件:
import 'package:flutter/material.dart';
import 'package:swipe_cards/swipe_cards.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Swipe Cards Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Swipe Cards Demo'),
debugShowCheckedModeBanner: false,
);
}
}
class Content {
final String text;
final Color color;
Content({this.text, this.color});
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, this.title}) : super(key: key);
final String? title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<SwipeItem> _swipeItems = <SwipeItem>[];
MatchEngine? _matchEngine;
GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey();
List<String> _names = ["Red", "Blue", "Green", "Yellow", "Orange", "Grey", "Purple", "Pink"];
List<Color> _colors = [
Colors.red,
Colors.blue,
Colors.green,
Colors.yellow,
Colors.orange,
Colors.grey,
Colors.purple,
Colors.pink
];
[@override](/user/override)
void initState() {
for (int i = 0; i < _names.length; i++) {
_swipeItems.add(SwipeItem(
content: Content(text: _names[i], color: _colors[i]),
likeAction: () {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text("Liked ${_names[i]}"),
duration: Duration(milliseconds: 500),
));
},
nopeAction: () {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text("Nope ${_names[i]}"),
duration: Duration(milliseconds: 500),
));
},
superlikeAction: () {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text("Superliked ${_names[i]}"),
duration: Duration(milliseconds: 500),
));
},
onSlideUpdate: (SlideRegion? region) async {
print("Region $region");
}));
}
_matchEngine = MatchEngine(swipeItems: _swipeItems);
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
title: Text(widget.title!),
),
body: Container(
child: Stack(children: [
Container(
height: MediaQuery.of(context).size.height - kToolbarHeight,
child: SwipeCards(
matchEngine: _matchEngine!,
itemBuilder: (BuildContext context, int index) {
return Container(
alignment: Alignment.center,
color: _swipeItems[index].content.color,
child: Text(
_swipeItems[index].content.text,
style: TextStyle(fontSize: 100),
),
);
},
onStackFinished: () {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text("Stack Finished"),
duration: Duration(milliseconds: 500),
));
},
itemChanged: (SwipeItem item, int index) {
print("item: ${item.content.text}, index: $index");
},
leftSwipeAllowed: true,
rightSwipeAllowed: true,
upSwipeAllowed: true,
fillSpace: true,
likeTag: Container(
margin: const EdgeInsets.all(15.0),
padding: const EdgeInsets.all(3.0),
decoration: BoxDecoration(
border: Border.all(color: Colors.green)
),
child: Text('Like'),
),
nopeTag: Container(
margin: const EdgeInsets.all(15.0),
padding: const EdgeInsets.all(3.0),
decoration: BoxDecoration(
border: Border.all(color: Colors.red)
),
child: Text('Nope'),
),
superLikeTag: Container(
margin: const EdgeInsets.all(15.0),
padding: const EdgeInsets.all(3.0),
decoration: BoxDecoration(
border: Border.all(color: Colors.orange)
),
child: Text('Super Like'),
),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
ElevatedButton(
onPressed: () {
_matchEngine!.currentItem?.nope();
},
child: Text("Nope")),
ElevatedButton(
onPressed: () {
_matchEngine!.currentItem?.superLike();
},
child: Text("Superlike")),
ElevatedButton(
onPressed: () {
_matchEngine!.currentItem?.like();
},
child: Text("Like"))
],
),
)
])));
}
}
更多关于Flutter卡片滑动插件swipe_cards的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter卡片滑动插件swipe_cards的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用swipe_cards
插件来实现卡片滑动效果的代码示例。swipe_cards
插件允许你创建一个卡片堆,用户可以通过滑动来浏览卡片。
首先,你需要在你的pubspec.yaml
文件中添加swipe_cards
依赖:
dependencies:
flutter:
sdk: flutter
swipe_cards: ^0.2.10 # 请检查最新版本号
然后运行flutter pub get
来获取依赖。
接下来,你可以在你的Flutter项目中实现卡片滑动功能。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:swipe_cards/swipe_cards.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Swipe Cards Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<String> cardData = [
'Card 1',
'Card 2',
'Card 3',
'Card 4',
'Card 5',
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Swipe Cards Example'),
),
body: Center(
child: SwipeCards(
cardBuilder: (context, index) {
return Card(
elevation: 4.0,
child: Center(
child: Text(cardData[index]),
),
);
},
cardCount: cardData.length,
onEnd: () {
// 当滑动到最后一张卡片时执行的操作
print('Reached the end!');
},
onSwipeLeft: (index) {
// 当卡片向左滑动时执行的操作
print('Swiped left on card: $index');
},
onSwipeRight: (index) {
// 当卡片向右滑动时执行的操作
print('Swiped right on card: $index');
},
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个SwipeCards
组件。这个组件通过cardBuilder
属性来构建每一张卡片,我们在这里简单地返回了一个包含文本的卡片。
cardCount
属性指定了卡片堆中的卡片数量。onEnd
回调函数在滑动到最后一张卡片时被调用。onSwipeLeft
和onSwipeRight
回调函数分别在卡片向左或向右滑动时被调用。
你可以根据需要自定义卡片的内容和样式,以及添加更多的回调函数来处理不同的滑动事件。希望这个示例能帮助你理解如何在Flutter项目中使用swipe_cards
插件。