ps(搬運作者介紹,不喜勿噴)
1被盈、介紹
swiper詳細介紹請查看swiper插件地址鏈接.
2践樱、安裝,最后版本按插件版本為準
flutter_swiper : ^lastest_version
3,基礎實現(xiàn)方式
import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Swiper(
itemBuilder: (BuildContext context,int index){
return new Image.network("http://via.placeholder.com/350x150",fit: BoxFit.fill,);
},
itemCount: 3,
pagination: new SwiperPagination(),
control: new SwiperControl(),
),
);
}
}
3.1參數(shù)介紹
參數(shù) | 默認值 | 描述 |
---|---|---|
scrollDirection | Axis.horizontal | 滾動方向,設置為Axis.vertical如果需要垂直滾動 |
loop | true | 無限輪播模式開關(guān) |
index | 0 | 初始的時候下標位置 |
autoplay | false | 自動播放開關(guān). |
onIndexChanged | void onIndexChanged(int index) | 當用戶手動拖拽或者自動播放引起下標改變的時候調(diào)用 |
onTap | void onTap(int index) | 當用戶點擊某個輪播的時候調(diào)用duration 300.0 動畫時間泌辫,單位是毫秒 |
pagination | null | 設置 new SwiperPagination() 展示默認分頁指示器 |
control | null | 設置 new SwiperControl() 展示默認分頁按 |
3.2分頁指示器
分頁指示器繼承自 SwiperPlugin,SwiperPlugin 為 Swiper 提供額外的界面.設置為new SwiperPagination() 展示默認分頁.
參數(shù) | 默認值 | 描述 |
---|---|---|
alignment | Alignment.bottomCenter | 如果要將分頁指示器放到其他位置叉跛,那么可以修改這個參數(shù) |
margin | const EdgeInsets.all(10.0) | 分頁指示器與容器邊框的距離 |
builder | SwiperPagination.dots | 目前已經(jīng)定義了兩個默認的分頁指示器樣式: SwiperPagination.dots 、 SwiperPagination.fraction跋理,都可以做進一步的自定義. |
如果需要定制自己的分頁指示器择克,那么可以這樣寫:
new Swiper(
...,
pagination:new SwiperCustomPagination(
builder:(BuildContext context, SwiperPluginConfig config){
return new YourOwnPaginatipon();
}
)
);
3.3控制器(SwiperController)
SwiperController 用于控制 Swiper的index屬性, 停止和開始自動播放. 通過 new SwiperController() 創(chuàng)建一個SwiperController實例,并保存前普,以便將來能使用肚邢。
方法 | 描述 |
---|---|
void move(int index, {bool animation: true}) | 移動到指定下標,設置是否播放動畫 |
void next({bool animation: true}) | 下一頁 |
void previous({bool animation: true}) | 上一頁 |
void startAutoplay() | 開始自動播放 |
void stopAutoplay() | 停止自動播放 |
自動播放
參數(shù) | 默認值 | 描述 |
---|---|---|
autoplayDely | 3000 | 自動播放延遲毫秒數(shù). |
autoplayDisableOnInteraction | true | 當用戶拖拽的時候拭卿,是否停止自動播放. |
3.4展示圖片
4骡湖、更多布局
4.1內(nèi)建的布局
new Swiper(
itemBuilder: (BuildContext context, int index) {
return new Image.network(
"http://via.placeholder.com/288x188",
fit: BoxFit.fill,
);
},
itemCount: 10,
viewportFraction: 0.8,
scale: 0.9,
)
new Swiper(
itemBuilder: (BuildContext context, int index) {
return new Image.network(
"http://via.placeholder.com/288x188",
fit: BoxFit.fill,
);
},
itemCount: 10,
itemWidth: 300.0,
layout: SwiperLayout.STACK,
)
new Swiper(
itemBuilder: (BuildContext context, int index) {
return new Image.network(
"http://via.placeholder.com/288x188",
fit: BoxFit.fill,
);
},
itemCount: 10,
itemWidth: 300.0,
itemHeight: 400.0,
layout: SwiperLayout.TINDER,
)
構(gòu)建自己的動畫
new Swiper(
layout: SwiperLayout.CUSTOM,
customLayoutOption: new CustomLayoutOption(
startIndex: -1,
stateCount: 3
).addRotate([
-45.0/180,
0.0,
45.0/180
]).addTranslate([
new Offset(-370.0, -40.0),
new Offset(0.0, 0.0),
new Offset(370.0, -40.0)
]),
itemWidth: 300.0,
itemHeight: 200.0,
itemBuilder: (context, index) {
return new Container(
color: Colors.grey,
child: new Center(
child: new Text("$index"),
),
);
},
itemCount: 10)
CustomLayoutOption 被設計用來描述布局和動畫,很簡單的可以指定每一個元素的狀態(tài).
new CustomLayoutOption(
startIndex: -1, /// 開始下標
stateCount: 3 /// 下面的數(shù)組長度
).addRotate([ // 每個元素的角度
-45.0/180,
0.0,
45.0/180
]).addTranslate([ /// 每個元素的偏移
new Offset(-370.0, -40.0),
new Offset(0.0, 0.0),
new Offset(370.0, -40.0)
])
5,代碼
new ConstrainedBox(
child: new Swiper(
outer:false,
itemBuilder: (c, i) {
return new Wrap(
runSpacing: 6.0,
children: [0,1,2,3,4,5,6,7,8,9].map((i){
return new SizedBox(
width: MediaQuery.of(context).size.width/5,
child: new Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new SizedBox(
child: new Container(
child: new 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,
),
new Padding(padding: new EdgeInsets.only(top:6.0),child: new Text("$i"),)
],
),
);
}).toList(),
);
},
pagination: new SwiperPagination(
margin: new EdgeInsets.all(5.0)
),
itemCount: 10,
),
constraints:new BoxConstraints.loose(new Size(screenWidth, 170.0))
),
這里可以找到所有的定制選項
https://github.com/jzoom/flutter_swiper/blob/master/example/lib/src/ExampleCustom.dart