Flutter轮播组件插件en_card_swiper的使用
Flutter轮播组件插件en_card_swiper的使用
概述
en_card_swiper
是一个用于 Flutter 的轮播组件插件,支持多种布局、无限循环功能,并且兼容 Android 和 iOS。它提供了丰富的配置选项,包括分页器、控制按钮、自动播放等。
安装
在 pubspec.yaml
文件中添加以下依赖:
en_card_swiper: ^0.0.1
然后运行以下命令安装依赖:
flutter packages get
或者使用以下命令:
flutter pub add en_card_swiper
基本用法
创建新项目
使用以下命令创建一个新的 Flutter 项目:
flutter create myapp
编辑 lib/main.dart
文件如下:
import 'package:flutter/material.dart';
import 'package:en_card_swiper/en_card_swiper.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ENSwiper(
itemBuilder: (BuildContext context, int index) {
return Image.network(
"https://via.placeholder.com/350x150",
fit: BoxFit.fill,
);
},
itemCount: 3,
pagination: ENSwiperPagination(),
control: ENSwiperController(),
),
);
}
}
运行后,你将看到一个简单的轮播组件,包含 3 张图片。
构造函数详解
基础参数
参数名称 | 默认值 | 描述 |
---|---|---|
scrollDirection |
Axis.horizontal |
如果设置为 Axis.horizontal ,子元素会水平排列;否则垂直排列。 |
axisDirection |
AxisDirection.left |
控制滚动方向,仅支持水平堆叠布局。 |
loop |
true |
是否启用连续循环模式。 |
index |
0 |
初始滑动索引。 |
autoplay |
false |
是否启用自动播放模式。 |
onIndexChanged |
void onIndexChanged(int index) |
用户滑动或自动播放时触发回调。 |
onTap |
void onTap(int index) |
用户点击 UI 时触发回调。 |
duration |
300.0 |
动画持续时间(毫秒)。 |
pagination |
null |
设置分页器,例如 ENSwiperPagination() 显示默认分页器。 |
control |
null |
设置控制按钮,例如 ENSwiperController() 显示默认控制按钮。 |
分页器
分页器通过 ENSwiperPagination
实现,支持自定义样式。
默认分页器
ENSwiper(
pagination: ENSwiperPagination(),
)
自定义分页器
ENSwiper(
pagination: SwiperCustomPagination(
builder: (BuildContext context, ENSwiperPluginConfig config) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: List.generate(config.itemCount, (index) {
return Container(
width: 10,
height: 10,
margin: EdgeInsets.symmetric(horizontal: 5),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: index == config.activeIndex ? Colors.blue : Colors.grey,
),
);
}),
);
},
),
)
控制按钮
控制按钮通过 ENSwiperControl
实现。
ENSwiper(
control: ENSwiperControl(),
)
自定义控制按钮
ENSwiper(
control: SwiperControl(
iconPrevious: Icons.arrow_back,
iconNext: Icons.arrow_forward,
color: Colors.red,
size: 40,
),
)
控制器
控制器用于手动控制轮播的索引或自动播放状态。
final SwiperController _controller = SwiperController();
ENSwiper(
controller: _controller,
onTap: (int index) {
print("Current Index: $index");
},
);
控制器方法
方法名 | 描述 |
---|---|
move(int index) |
移动到指定索引,可选是否带动画。 |
next() |
移动到下一张。 |
previous() |
移动到上一张。 |
startAutoplay() |
启动自动播放。 |
stopAutoplay() |
停止自动播放。 |
自动播放
ENSwiper(
autoplay: true,
autoplayDelay: 2000, // 自动播放间隔(毫秒)
autoplayDisableOnInteraction: true, // 手动滑动时暂停自动播放
)
内置布局
ENSwiper
支持多种内置布局。
默认布局
ENSwiper(
itemBuilder: (BuildContext context, int index) {
return Image.network("https://via.placeholder.com/288x188");
},
itemCount: 10,
viewportFraction: 0.8,
scale: 0.9,
)
堆叠布局
ENSwiper(
itemBuilder: (BuildContext context, int index) {
return Image.network("https://via.placeholder.com/288x188");
},
itemCount: 10,
itemWidth: 300.0,
layout: SwiperLayout.STACK,
)
推卡片布局
ENSwiper(
itemBuilder: (BuildContext context, int index) {
return Image.network("https://via.placeholder.com/288x188");
},
itemCount: 10,
itemWidth: 300.0,
itemHeight: 400.0,
layout: SwiperLayout.TINDER,
)
自定义动画
可以通过 CustomLayoutOption
创建自定义动画。
ENSwiper(
layout: SwiperLayout.CUSTOM,
customLayoutOption: CustomLayoutOption(
startIndex: -1,
stateCount: 3,
)..addRotate([
-45.0 / 180,
0.0,
45.0 / 180,
])..addTranslate([
Offset(-370.0, -40.0),
Offset(0.0, 0.0),
Offset(370.0, -40.0),
]),
itemWidth: 300.0,
itemHeight: 200.0,
itemBuilder: (context, index) {
return Container(
color: Colors.grey,
child: Center(
child: Text("$index"),
),
);
},
itemCount: 10,
)
示例代码
ConstrainedBox(
child: ENSwiper(
outer: false,
itemBuilder: (c, i) {
return Wrap(
runSpacing: 6.0,
children: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((i) {
return SizedBox(
width: MediaQuery.of(context).size.width / 5,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
child: Container(
child: Image.network(
"https://fuss10.elemecdn.com/c/db/d20d49e5029281b9b73db1c5ec6f9jpeg.jpeg%3FimageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90",
),
),
height: MediaQuery.of(context).size.width * 0.12,
width: MediaQuery.of(context).size.width * 0.12,
),
Padding(
padding: EdgeInsets.only(top: 6.0),
child: Text("$i"),
),
],
),
);
}).toList(),
);
},
pagination: ENSwiperPagination(
margin: EdgeInsets.all(5.0),
),
itemCount: 10,
),
constraints: BoxConstraints.loose(Size(screenWidth, 170.0)),
),
常见问题
如何移除默认控制按钮?
不传递任何值给 control
参数即可:
ENSwiper(
control: null,
)
如何移除默认分页器?
不传递任何值给 pagination
参数即可:
ENSwiper(
pagination: null,
)
更多关于Flutter轮播组件插件en_card_swiper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter轮播组件插件en_card_swiper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
en_card_swiper
是一个用于 Flutter 的轮播组件插件,它允许你创建卡片式的轮播效果。这个插件通常用于展示一组卡片,用户可以通过滑动来浏览这些卡片。
安装
首先,你需要在 pubspec.yaml
文件中添加 en_card_swiper
插件的依赖:
dependencies:
flutter:
sdk: flutter
en_card_swiper: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
以下是一个简单的示例,展示如何使用 en_card_swiper
插件来创建一个卡片轮播:
import 'package:flutter/material.dart';
import 'package:en_card_swiper/en_card_swiper.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Card Swiper Example'),
),
body: CardSwiperExample(),
),
);
}
}
class CardSwiperExample extends StatelessWidget {
final List<String> cards = [
'Card 1',
'Card 2',
'Card 3',
'Card 4',
'Card 5',
];
@override
Widget build(BuildContext context) {
return Center(
child: CardSwiper(
cardsCount: cards.length,
cardBuilder: (context, index) {
return Card(
child: Center(
child: Text(cards[index]),
),
);
},
onSwipe: (index, direction) {
print('Swiped card $index to $direction');
},
),
);
}
}
参数说明
cardsCount
: 卡片的总数量。cardBuilder
: 用于构建卡片的回调函数,接收context
和index
参数,返回一个Widget
。onSwipe
: 当卡片被滑动时的回调函数,接收index
和direction
参数。
自定义选项
en_card_swiper
还提供了一些自定义选项,例如:
cardWidth
: 卡片的宽度。cardHeight
: 卡片的高度。cardPadding
: 卡片之间的间距。swipeThreshold
: 滑动的阈值,决定卡片何时被认定为已滑动。swipeDirection
: 允许的滑动方向(左、右、上、下)。
示例代码
CardSwiper(
cardsCount: cards.length,
cardBuilder: (context, index) {
return Card(
child: Center(
child: Text(cards[index]),
),
);
},
onSwipe: (index, direction) {
print('Swiped card $index to $direction');
},
cardWidth: 300,
cardHeight: 200,
cardPadding: 16,
swipeThreshold: 0.5,
swipeDirection: SwipeDirection.horizontal,
)