Flutter轮播图插件flutter_swiper_ms的使用
Flutter轮播图插件flutter_swiper_ms的使用
简介
flutter_swiper_ms
是一个功能强大的 Flutter 轮播图插件,支持多种样式和配置。通过该插件,您可以轻松实现水平、垂直、分数样式等多种轮播效果,并且可以自定义分页器和控制器。
以下是一个完整的示例,展示如何在 Flutter 应用中使用 flutter_swiper_ms
插件。
添加依赖
在 pubspec.yaml
文件中添加依赖:
dependencies:
flutter_swiper_ms: ^0.0.1
然后运行以下命令以安装依赖:
flutter pub get
示例代码
主应用文件
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_swiper_ms/flutter_swiper_ms.dart';
void main() => runApp(const MyApp());
class MyScrollBehavior extends MaterialScrollBehavior {
[@override](/user/override)
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
};
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
scrollBehavior: MyScrollBehavior(),
title: 'Flutter Swiper Example',
theme: ThemeData.light(),
home: const MyHomePage(title: 'Flutter Swiper'),
routes: {
'/example01': (context) => const ExampleHorizontal(),
'/example02': (context) => const ExampleVertical(),
'/example03': (context) => const ExampleFraction(),
'/example04': (context) => const ExampleCustomPagination(),
'/example05': (context) => const ExamplePhone(),
'/example06': (context) => const ScaffoldWidget(
child: ExampleSwiperInScrollView(),
title: 'ScrollView',
),
'/example07': (context) => const ScaffoldWidget(
child: ExampleCustom(),
title: 'Custom All',
)
},
);
}
}
主页面
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Widget> render(BuildContext context, List<List<String>> children) {
return ListTile.divideTiles(
context: context,
tiles: children.map((data) {
return buildListTile(context, data[0], data[1], data[2]);
}),
).toList();
}
Widget buildListTile(
BuildContext context, String title, String subtitle, String url) {
return ListTile(
onTap: () {
Navigator.of(context).pushNamed(url);
},
isThreeLine: true,
dense: false,
leading: null,
title: Text(title),
subtitle: Text(subtitle),
trailing: const Icon(
Icons.arrow_right,
color: Colors.blueAccent,
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ListView(
children: render(context, [
['Horizontal', '水平滚动', '/example01'],
['Vertical', '垂直滚动', '/example02'],
['Fraction', '分数样式', '/example03'],
['Custom Pagination', '自定义分页器', '/example04'],
['Phone', '手机视图', '/example05'],
['ScrollView', '嵌套在ScrollView中', '/example06'],
['Custom', '完全自定义属性', '/example07']
]),
),
);
}
}
水平轮播图
class ExampleHorizontal extends StatelessWidget {
const ExampleHorizontal({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('水平轮播图'),
),
body: Swiper(
itemBuilder: (context, index) {
final image = images[index]; // 假设 images 是预定义的图片列表
return Image.asset(
image,
fit: BoxFit.fill,
);
},
indicatorLayout: PageIndicatorLayout.COLOR,
autoplay: true,
itemCount: images.length,
pagination: const SwiperPagination(),
control: const SwiperControl(),
),
);
}
}
垂直轮播图
class ExampleVertical extends StatelessWidget {
const ExampleVertical({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('垂直轮播图'),
),
body: Swiper(
itemBuilder: (context, index) {
return Image.asset(
images[index],
fit: BoxFit.fill,
);
},
autoplay: true,
itemCount: images.length,
scrollDirection: Axis.vertical,
pagination: const SwiperPagination(alignment: Alignment.centerRight),
control: const SwiperControl(),
));
}
}
分数样式轮播图
class ExampleFraction extends StatelessWidget {
const ExampleFraction({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('分数样式轮播图'),
),
body: Column(
children: <Widget>[
Expanded(
child: Swiper(
itemBuilder: (context, index) {
return Image.asset(
images[index],
fit: BoxFit.fill,
);
},
autoplay: true,
itemCount: images.length,
pagination:
const SwiperPagination(builder: SwiperPagination.fraction),
control: const SwiperControl(),
)),
Expanded(
child: Swiper(
itemBuilder: (context, index) {
return Image.asset(
images[index],
fit: BoxFit.fill,
);
},
autoplay: true,
itemCount: images.length,
scrollDirection: Axis.vertical,
pagination: const SwiperPagination(
alignment: Alignment.centerRight,
builder: SwiperPagination.fraction),
))
],
));
}
}
自定义分页器
class ExampleCustomPagination extends StatelessWidget {
const ExampleCustomPagination({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('自定义分页器'),
),
body: Column(
children: <Widget>[
Expanded(
child: Swiper(
itemBuilder: (context, index) {
return Image.asset(
images[index],
fit: BoxFit.fill,
);
},
autoplay: true,
itemCount: images.length,
pagination: SwiperPagination(
margin: EdgeInsets.zero,
builder: SwiperCustomPagination(builder: (context, config) {
return ConstrainedBox(
child: Container(
color: Colors.white,
child: Text(
'${titles[config.activeIndex]} ${config.activeIndex + 1}/${config.itemCount}',
style: const TextStyle(fontSize: 20.0),
),
),
constraints: const BoxConstraints.expand(height: 50.0),
);
})),
control: const SwiperControl(),
),
),
Expanded(
child: Swiper(
itemBuilder: (context, index) {
return Image.asset(
images[index],
fit: BoxFit.fill,
);
},
autoplay: true,
itemCount: images.length,
pagination: SwiperPagination(
margin: EdgeInsets.zero,
builder: SwiperCustomPagination(builder: (context, config) {
return ConstrainedBox(
child: Row(
children: <Widget>[
Text(
'${titles[config.activeIndex]} ${config.activeIndex + 1}/${config.itemCount}',
style: const TextStyle(fontSize: 20.0),
),
Expanded(
child: Align(
alignment: Alignment.centerRight,
child: const DotSwiperPaginationBuilder(
color: Colors.black12,
activeColor: Colors.black,
size: 10.0,
activeSize: 20.0)
.build(context, config),
),
)
],
),
constraints: const BoxConstraints.expand(height: 50.0),
);
})),
control: const SwiperControl(color: Colors.redAccent),
),
)
],
));
}
}
手机视图
class ExamplePhone extends StatelessWidget {
const ExamplePhone({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('手机视图'),
),
body: Stack(
children: <Widget>[
ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: Image.asset(
'images/bg.jpeg',
fit: BoxFit.fill,
),
),
Swiper.children(
autoplay: false,
pagination: const SwiperPagination(
margin: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 30.0),
builder: DotSwiperPaginationBuilder(
color: Colors.white30,
activeColor: Colors.white,
size: 20.0,
activeSize: 20.0)),
children: <Widget>[
Image.asset(
'images/1.png',
fit: BoxFit.contain,
),
Image.asset(
'images/2.png',
fit: BoxFit.contain,
),
Image.asset('images/3.png', fit: BoxFit.contain)
],
)
],
),
);
}
}
1 回复
更多关于Flutter轮播图插件flutter_swiper_ms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_swiper_ms
是一个用于 Flutter 的轮播图插件,基于 flutter_swiper
进行了一些改进和优化。使用这个插件可以轻松地实现轮播图效果。以下是如何使用 flutter_swiper_ms
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_swiper_ms
依赖:
dependencies:
flutter:
sdk: flutter
flutter_swiper_ms: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 基本使用
在你的 Dart 文件中导入 flutter_swiper_ms
并使用 Swiper
组件来创建轮播图。
import 'package:flutter/material.dart';
import 'package:flutter_swiper_ms/flutter_swiper_ms.dart';
class MyHomePage extends StatelessWidget {
final List<String> images = [
'https://via.placeholder.com/350x150',
'https://via.placeholder.com/350x150/ff0000',
'https://via.placeholder.com/350x150/00ff00',
'https://via.placeholder.com/350x150/0000ff',
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Swiper MS Demo'),
),
body: Swiper(
itemBuilder: (BuildContext context, int index) {
return Image.network(images[index], fit: BoxFit.cover);
},
itemCount: images.length,
pagination: SwiperPagination(),
control: SwiperControl(),
),
);
}
}
void main() => runApp(MaterialApp(
home: MyHomePage(),
));
3. 配置参数
Swiper
组件提供了许多可配置的参数,以下是一些常用的配置:
itemBuilder
: 用于构建每个轮播项的构建器。itemCount
: 轮播项的数量。pagination
: 分页指示器,可以设置为SwiperPagination()
来显示默认的分页指示器。control
: 控制按钮,可以设置为SwiperControl()
来显示默认的控制按钮。autoplay
: 是否自动播放,默认为false
。duration
: 自动播放的间隔时间,默认为 3000 毫秒。loop
: 是否循环播放,默认为true
。scrollDirection
: 滚动方向,可以是Axis.horizontal
(水平)或Axis.vertical
(垂直)。
4. 自定义分页指示器和控制按钮
你可以通过 SwiperPagination
和 SwiperControl
来自定义分页指示器和控制按钮的外观。
Swiper(
itemBuilder: (BuildContext context, int index) {
return Image.network(images[index], fit: BoxFit.cover);
},
itemCount: images.length,
pagination: SwiperPagination(
builder: DotSwiperPaginationBuilder(
color: Colors.grey,
activeColor: Colors.blue,
),
),
control: SwiperControl(
color: Colors.blue,
),
)