Flutterによるマルチキャストの実現banner
10075 ワード
効果図を先に表示:
flutterのSwiperコントロール、ワイヤレスマルチキャストを実現する:
1.準備
まずpubspecを開く.yamlファイル、コントロール依存性の追加
実行コマンド:flutter packages get
2.使用
完全なdartコード
上のコードにはtoastが使われているので、toastの依存を追加する必要があります.画像をクリックするとH 5ページをジャンプする必要がある場合はurlを追加する必要があります.Launcher依存,方法はswiperと類似しpubspec.yamlファイルに追加
Swiper基本パラメータ
パラメータ
デフォルト
説明
scrollDirection
Axis.horizontal
スクロール方向、Axisに設定.vertical垂直スクロールが必要な場合
loop
true
ワイヤレスマルチキャストモードスイッチ
index
0
初期時の下付き位置
autoplay
false
自動再生スイッチ
autoplayDely
3000
自動再生遅延ミリ秒数
autoplayDiableOnInteraction
true
ユーザがドラッグすると、自動再生を停止するかどうか.
onIndexChanged
void onIndexChanged(int index)
ユーザが手動でドラッグしたり、自動的に再生したりして下付き文字が変更された場合に呼び出されます.
onTap
void onTap(int index)
ユーザーがローテーションをクリックすると呼び出されます
duration
300.0
アニメーション時間(ミリ秒単位)
pagination
null
control
null
ページングインジケーターpagination
すなわちbannerの下の小さな円点は,bannerの輪播に伴ってスライドする
パラメータ
デフォルト
説明
alignment
Alignment.bottomCenter
ページングインジケータを別の場所に配置する場合は、このパラメータを変更できます.
margin
const EdgeInsets.all(10.0)
ページングインジケータとコンテナの枠線の距離
builder
SwiperPagination.dots
現在、2つのデフォルトのページングインジケータスタイルが定義されている:
シンプルなカスタマイズ
完全カスタムインジケータ
コントロールボタンコントロール
Swiperのコントロール属性、すなわちbannerの左右のボタンであり、
ボタンを制御したくない場合は、swiperのcontrolプロパティをnullに設定します.
パラメータ
デフォルト
説明
iconPrevious
Icons.arrow_back_ios
前ページのIconData
iconNext
Icons.arrow_forward_ios
次ページのIconData
color
Theme.of(context).primaryColor
コントロールボタンの色
size
30.0
コントロールボタンのサイズ
padding
const EdgeInsets.all(5.0)
コントロールボタンとコンテナの距離
コントローラ(SwiperController)
方法
説明
void move(int index, {bool animation: true})
指定した下付き文字に移動し、アニメーションを再生するかどうかを設定します.
void next({bool animation: true})
次のページ
void previous({bool animation: true})
前のページ
void startAutoplay()
自動再生を開始
void stopAutoplay()
自動再生を停止
Swiperのlayoutプロパティ、レイアウト
注意:Swiperのlayoutプロパティを使用する場合は、itemWidthプロパティが必要です.そうしないと、エラーが発生します.
2番目のbannerに2つのコードを追加します.
2.SwiperLayout.CUSTOM
元の3番目のbannerに以下のコードを追加
3.layout: SwiperLayout.TINDER
元の2番目のbannerに次のコードを追加して変更します.itemWidthとitemHeightは設定しなければなりません.そうしないと、エラーが発生します.
flutterのSwiperコントロール、ワイヤレスマルチキャストを実現する:
1.準備
まずpubspecを開く.yamlファイル、コントロール依存性の追加
flutter_swiper: ^1.0.6 // pub
実行コマンド:flutter packages get
2.使用
完全なdartコード
import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:fluttertoast/fluttertoast.dart';
final List images = [
'images/viewpage_ima1.jpg',
'images/viewpage_ima2.jpg',
'images/viewpage_ima3.jpeg',
'images/viewpage_ima4.jpg',
'images/icon_bg.jpg',
];
final List descriptions = [
' , ',
' , ',
' , ',
' ',
' ',
];
class MySwiperPage extends StatefulWidget {
@override
SwiperPageState createState() {
return SwiperPageState();
}
}
class SwiperPageState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(' '),
),
body: Column(
children: [
Container(
width: MediaQuery.of(context).size.width,
margin: const EdgeInsets.only(bottom: 10.0),
height: 180.0,
child: Swiper(
itemBuilder: _swiperBuilder,
itemCount: images.length,
pagination: new SwiperPagination(
builder: DotSwiperPaginationBuilder(
color: Colors.black38,
activeColor: Colors.blueAccent,
)),
control: null,
duration: 300,
// viewportFraction: 0.9,
scrollDirection: Axis.horizontal,
autoplay: true,
onTap: (int index){
Fluttertoast.showToast(msg: ' $index ');
},
)),
Center(
child: SizedBox.fromSize(
size: Size.fromHeight(180.0),
child: Swiper(
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 16.0, horizontal: 0.0),
child: GestureDetector(
onTap: () {
Fluttertoast.showToast(msg: descriptions[index]);
},
child: ClipRRect(
borderRadius: BorderRadius.circular(6.0),
child: Stack(
fit: StackFit.expand,
children: [
Image.asset(images[index], fit: BoxFit.cover),
],
),
),
),
);
},
itemCount: images.length,
//
pagination: new SwiperPagination(
builder: DotSwiperPaginationBuilder(
color: Colors.black38,
activeColor: Colors.white,
),
margin: const EdgeInsets.only(bottom: 22.0)),
control: null,
duration: 300,
scrollDirection: Axis.horizontal,
viewportFraction: 0.8,
scale: 0.85,
autoplay: true,
onTap: (int index) {
Fluttertoast.showToast(msg: ' $index ');
},
),
)),
Center(
child: SizedBox.fromSize(
size: Size.fromHeight(180.0),
child: Swiper(
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 16.0, horizontal: 15.0),
child: GestureDetector(
onTap: () {
Fluttertoast.showToast(msg: descriptions[index]);
},
child: ClipRRect(
// elevation: 5.0,
borderRadius: BorderRadius.circular(6.0),
child: Stack(
fit: StackFit.expand,
children: [
Image.asset(images[index], fit: BoxFit.cover),
// decorationBox,
],
),
),
),
);
},
itemCount: images.length,
//
pagination: new SwiperPagination(
builder: DotSwiperPaginationBuilder(
color: Colors.black38,
activeColor: Colors.white,
),
margin: const EdgeInsets.only(bottom: 22.0)),
control: null,
duration: 300,
scrollDirection: Axis.horizontal,
viewportFraction: 0.95,
autoplay: true,
onTap: (int index) {
Fluttertoast.showToast(msg: ' $index ');
},
),
))
],
)
);
}
Widget _swiperBuilder(BuildContext context, int index) {
return (Image.asset(
images[index],
fit: BoxFit.fill,
));
}
void _goOtherApp(int index) async {
const url = 'https://www.baidu.com'; // url scheme host :scheme://host
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
}
上のコードにはtoastが使われているので、toastの依存を追加する必要があります.画像をクリックするとH 5ページをジャンプする必要がある場合はurlを追加する必要があります.Launcher依存,方法はswiperと類似しpubspec.yamlファイルに追加
fluttertoast: ^2.2.11
flutter_swiper: ^1.0.6
url_launcher: ^5.0.3
Swiper基本パラメータ
パラメータ
デフォルト
説明
scrollDirection
Axis.horizontal
スクロール方向、Axisに設定.vertical垂直スクロールが必要な場合
loop
true
ワイヤレスマルチキャストモードスイッチ
index
0
初期時の下付き位置
autoplay
false
自動再生スイッチ
autoplayDely
3000
自動再生遅延ミリ秒数
autoplayDiableOnInteraction
true
ユーザがドラッグすると、自動再生を停止するかどうか.
onIndexChanged
void onIndexChanged(int index)
ユーザが手動でドラッグしたり、自動的に再生したりして下付き文字が変更された場合に呼び出されます.
onTap
void onTap(int index)
ユーザーがローテーションをクリックすると呼び出されます
duration
300.0
アニメーション時間(ミリ秒単位)
pagination
null
new SwiperPagination()
を設定してデフォルトのページングインジケータを表示control
null
new SwiperControl()
のデフォルトページングボタンの設定ページングインジケーターpagination
すなわちbannerの下の小さな円点は,bannerの輪播に伴ってスライドする
パラメータ
デフォルト
説明
alignment
Alignment.bottomCenter
ページングインジケータを別の場所に配置する場合は、このパラメータを変更できます.
margin
const EdgeInsets.all(10.0)
ページングインジケータとコンテナの枠線の距離
builder
SwiperPagination.dots
現在、2つのデフォルトのページングインジケータスタイルが定義されている:
SwiperPagination.dots
、SwiperPagination.fraction
、いずれもさらなるカスタマイズが可能である.シンプルなカスタマイズ
pagination: new SwiperPagination(
builder: DotSwiperPaginationBuilder(
color: Colors.black38,
activeColor: Colors.white,
),
margin: const EdgeInsets.only(bottom: 22.0))
完全カスタムインジケータ
new Swiper(
...,
pagination:new SwiperCustomPagination(
builder:(BuildContext context, SwiperPluginConfig config){
return new YourOwnPagination();
}
)
);
コントロールボタンコントロール
Swiperのコントロール属性、すなわちbannerの左右のボタンであり、
SwiperPlugin
から継承され、new SwiperControl()
を設定してデフォルトの制御ボタンを表示するボタンを制御したくない場合は、swiperのcontrolプロパティをnullに設定します.
パラメータ
デフォルト
説明
iconPrevious
Icons.arrow_back_ios
前ページのIconData
iconNext
Icons.arrow_forward_ios
次ページのIconData
color
Theme.of(context).primaryColor
コントロールボタンの色
size
30.0
コントロールボタンのサイズ
padding
const EdgeInsets.all(5.0)
コントロールボタンとコンテナの距離
コントローラ(SwiperController)
SwiperController
は、Swiperのindex
の属性を制御、自動再生を停止、開始するためのものである.new SwiperController()
でSwiperControllerインスタンスを作成し、将来使用できるように保存します.方法
説明
void move(int index, {bool animation: true})
指定した下付き文字に移動し、アニメーションを再生するかどうかを設定します.
void next({bool animation: true})
次のページ
void previous({bool animation: true})
前のページ
void startAutoplay()
自動再生を開始
void stopAutoplay()
自動再生を停止
Swiperのlayoutプロパティ、レイアウト
1.SwiperLayout.STACK
注意:Swiperのlayoutプロパティを使用する場合は、itemWidthプロパティが必要です.そうしないと、エラーが発生します.
2番目のbannerに2つのコードを追加します.
itemWidth: 300.0,
layout: SwiperLayout.STACK,
2.SwiperLayout.CUSTOM
元の3番目のbannerに以下のコードを追加
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: 300.0,
3.layout: SwiperLayout.TINDER
元の2番目のbannerに次のコードを追加して変更します.itemWidthとitemHeightは設定しなければなりません.そうしないと、エラーが発生します.
size: Size.fromHeight(280.0),// ,
//
itemWidth: 350.0,
itemHeight: 250.0,//
layout: SwiperLayout.TINDER