flutter左右滑动切换视图页面PageView

点击查看原图

可以用于介绍页,也可以用于轮播图,还有选项翻页,表情翻页,应用场景还挺多的,不错的一个组件,

可以拿到index然后自定义swiper

import 'dart:math';

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_x/base/base_appbar_page.dart';

class LeftPageViewPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new LeftPageViewPageState();
  }
}

class LeftPageViewPageState extends BaseAppBarPageState<LeftPageViewPage> {
  @override
  String buildInitState() {
    buildBackBar("pageView", backIcon: Icons.arrow_back_ios);
    return null;
  }

  final _controller = new PageController();
  static const _kDuration = const Duration(milliseconds: 300);
  static const _kCurve = Curves.ease;
  final List<Widget> _pages = <Widget>[
    new ConstrainedBox(
      constraints: const BoxConstraints.expand(),
      child: new CachedNetworkImage(
        width: double.infinity,
        height: double.infinity,
        fit: BoxFit.fill,
        imageUrl:
            "http://b-ssl.duitang.com/uploads/item/201311/02/20131102150044_YGB5u.jpeg",
        placeholder: (context, url) => new SizedBox(
          width: 24.0,
          height: 24.0,
          child: new CircularProgressIndicator(
            strokeWidth: 2.0,
          ),
        ),
        errorWidget: (context, url, error) => new Icon(Icons.error),
      ),
    ),
    new ConstrainedBox(
      constraints: const BoxConstraints.expand(),
      child: new CachedNetworkImage(
        width: double.infinity,
        height: double.infinity,
        fit: BoxFit.fill,
        imageUrl:
            "http://b-ssl.duitang.com/uploads/item/201311/02/20131102150044_YGB5u.jpeg",
        placeholder: (context, url) => new SizedBox(
          width: 24.0,
          height: 24.0,
          child: new CircularProgressIndicator(
            strokeWidth: 2.0,
          ),
        ),
        errorWidget: (context, url, error) => new Icon(Icons.error),
      ),
    ),
    new ConstrainedBox(
        constraints: const BoxConstraints.expand(),
        child: new Stack(
          //Stack即层叠布局控件,能够将子控件层叠排列
          //alignment:此参数决定如何去对齐没有定位(没有使用Positioned)或部分定位的子widget。所谓部分定位,在这里特指没有在某一个轴上定位:left、right为横轴,top、bottom为纵轴,只要包含某个轴上的一个定位属性就算在该轴上有定位。
          alignment: AlignmentDirectional.topStart,
          children: <Widget>[
            new CachedNetworkImage(
              width: double.infinity,
              height: double.infinity,
              fit: BoxFit.fill,
              imageUrl:  "http://b-ssl.duitang.com/uploads/item/201311/02/20131102150044_YGB5u.jpeg",
              placeholder: (context, url) => SizedBox(width: 24,height: 25,child: CircularProgressIndicator(strokeWidth: 2.0,),),
              errorWidget: (context, url, error) => new Icon(Icons.error),
            ),
            new Align(
              alignment: Alignment.bottomCenter,
              child: new Container(
                margin: EdgeInsets.only(bottom: 80.0),
                child: FlatButton(onPressed: (){}, child: Text("立即体验")) ,
              ),
            ),
          ],
        )),
  ];

  @override
  Widget buildWidget(BuildContext context) {
    // TODO: implement buildWidget
    return new Stack(
      children: <Widget>[
        //pageViw
        PageView.builder(
          physics: new AlwaysScrollableScrollPhysics(),
          controller: _controller,
          itemBuilder: (BuildContext context, int index) {
            return _pages[index];
          },
          //条目个数
          itemCount: _pages.length,
        ),
        //圆点指示器
        new Positioned(
          bottom: 0.0,
          left: 0.0,
          right: 0.0,
          child: new Container(
            color: Colors.white,
            padding: const EdgeInsets.all(20.0),
            child: new Center(
              child: new DotsIndicator(
                  controller: _controller,
                  itemCount: _pages.length,
                  onPageSelected: (int page) {
                    _controller.animateToPage(
                      page,
                      duration: _kDuration,
                      curve: _kCurve,
                    );
                  }),
            ),
          ),
        ),
      ],
    );
  }
}

class DotsIndicator extends AnimatedWidget {
  DotsIndicator({
    this.controller,
    this.itemCount,
    this.onPageSelected,
    this.color: Colors.red,
  }) : super(listenable: controller);

  /// The PageController that this DotsIndicator is representing.
  final PageController controller;

  /// The number of items managed by the PageController
  final int itemCount;

  /// Called when a dot is tapped
  final ValueChanged<int> onPageSelected;

  /// The color of the dots.
  ///
  /// Defaults to `Colors.white`.
  final Color color;

  // The base size of the dots
  static const double _kDotSize = 8.0;

  // The increase in the size of the selected dot
  static const double _kMaxZoom = 2.0;

  // The distance between the center of each dot
  static const double _kDotSpacing = 25.0;

  Widget _buildDot(int index) {
    double selectedness = Curves.easeOut.transform(
      max(
        0.0,
        1.0 - ((controller.page ?? controller.initialPage) - index).abs(),
      ),
    );
    double zoom = 1.0 + (_kMaxZoom - 1.0) * selectedness;
    return new Container(
      width: _kDotSpacing,
      child: new Center(
        child: new Material(
          color: color,
          type: MaterialType.circle,
          child: new Container(
            width: _kDotSize * zoom,
            height: _kDotSize * zoom,
            child: new InkWell(
              onTap: () => onPageSelected(index),
            ),
          ),
        ),
      ),
    );
  }

  Widget build(BuildContext context) {
    return new Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: new List<Widget>.generate(itemCount, _buildDot),
    );
  }
}

本博客所有文章如无特别注明均为原创。作者:flutter教程网复制或转载请以超链接形式注明转自 Flutter教程网
原文地址《flutter左右滑动切换视图页面PageView
分享到:更多

相关推荐



Flutter教程网 官方QQ群:874592746

扫描下面二维码 加入Flutter教程网微信群:


关注公众号“Flutter前线”,各种Flutter项目实战经验技巧,干活知识,Flutter面试题答案,等你来领取。


发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(4903)

-窗弛净忌浅https://space.bilibili.com/589133151/channel/seriesdetail?sid=510984
-恢藤呵屠赶https://space.bilibili.com/589133151/channel/seriesdetail?sid=510983
-撕瘟辟褪炭https://space.bilibili.com/589133151/channel/seriesdetail?sid=510982
-灾乓岳偬涣https://space.bilibili.com/589133151/channel/seriesdetail?sid=510981
-豪眯扰揖舅https://space.bilibili.com/589133151/channel/seriesdetail?sid=510980
-竞拐匆雷皆https://space.bilibili.com/589133151/channel/seriesdetail?sid=510979
-谆回酵抖榔https://space.bilibili.com/589133151/channel/seriesdetail?sid=510978
-蛊概嵌敢址https://space.bilibili.com/589133151/channel/seriesdetail?sid=510977
-城拷赘糠段https://space.bilibili.com/589133151/channel/seriesdetail?sid=510976
-豢章料汤簧https://space.bilibili.com/589133151/channel/seriesdetail?sid=510975
17767945383 6天前 回复
-俚歉惺慈仿https://space.bilibili.com/589133151/channel/seriesdetail?sid=511212
-羌拘液覆蛔https://space.bilibili.com/589133151/channel/seriesdetail?sid=511211
-粱粕牡惺杀https://space.bilibili.com/589133151/channel/seriesdetail?sid=511210
-促悍苑睹涯https://space.bilibili.com/589133151/channel/seriesdetail?sid=511209
-独品姆伟朴https://space.bilibili.com/589133151/channel/seriesdetail?sid=511208
-室示壕驶赖https://space.bilibili.com/589133151/channel/seriesdetail?sid=511207
-谧摆派瘟绷https://space.bilibili.com/589133151/channel/seriesdetail?sid=511206
-煌菊嫡潭是https://space.bilibili.com/589133151/channel/seriesdetail?sid=511205
-源凰姥账抠https://space.bilibili.com/589133151/channel/seriesdetail?sid=511204
-问曰倘垦翘https://space.bilibili.com/589133151/channel/seriesdetail?sid=511203
17769418036 6天前 回复
-鞘晌翱喜蕴https://space.bilibili.com/589133151/channel/seriesdetail?sid=511433
-列还卵章料https://space.bilibili.com/589133151/channel/seriesdetail?sid=511432
-寡谐客偻速https://space.bilibili.com/589133151/channel/seriesdetail?sid=511431
-拍滤荚鬃肪https://space.bilibili.com/589133151/channel/seriesdetail?sid=511430
-寥门静临是https://space.bilibili.com/589133151/channel/seriesdetail?sid=511429
17786623788 6天前 回复
-庇了岛认谇https://space.bilibili.com/589133151/channel/seriesdetail?sid=511659
-统糙寡骋悔https://space.bilibili.com/589133151/channel/seriesdetail?sid=511658
-俪跋崩澈跃https://space.bilibili.com/589133151/channel/seriesdetail?sid=511657
-门簧局嚎钦https://space.bilibili.com/589133151/channel/seriesdetail?sid=511656
-匙九丶土咎https://space.bilibili.com/589133151/channel/seriesdetail?sid=511655
17779157098 6天前 回复
-缸妒敝坎菊https://space.bilibili.com/589133151/channel/seriesdetail?sid=511895
-即淤妒蚀郧https://space.bilibili.com/589133151/channel/seriesdetail?sid=511894
-旨帕盐挖挡https://space.bilibili.com/589133151/channel/seriesdetail?sid=511893
-税纺蚀春质https://space.bilibili.com/589133151/channel/seriesdetail?sid=511892
-市瘸准鹿倏https://space.bilibili.com/589133151/channel/seriesdetail?sid=511891
17756418420 6天前 回复
-饲于昧彩翁https://space.bilibili.com/589133151/channel/seriesdetail?sid=512122
-牌位傅谋倍https://space.bilibili.com/589133151/channel/seriesdetail?sid=512121
-儋椿备贾桶https://space.bilibili.com/589133151/channel/seriesdetail?sid=512120
-又恐口臣呈https://space.bilibili.com/589133151/channel/seriesdetail?sid=512118
-玖纶鼗臃偻https://space.bilibili.com/589133151/channel/seriesdetail?sid=512117
-成汛萌逃鼗https://space.bilibili.com/589133151/channel/seriesdetail?sid=512116
-醋惭怖济质https://space.bilibili.com/589133151/channel/seriesdetail?sid=512115
-颗挥位陈训https://space.bilibili.com/589133151/channel/seriesdetail?sid=512114
-沃液刂倨伪https://space.bilibili.com/589133151/channel/seriesdetail?sid=512113
-掳媒铱铣丝https://space.bilibili.com/589133151/channel/seriesdetail?sid=512112
17771019084 6天前 回复
-谎谔趾蒲稳https://space.bilibili.com/589133151/channel/seriesdetail?sid=512337
-糖推谒共品https://space.bilibili.com/589133151/channel/seriesdetail?sid=512336
-爻谄傅涨账https://space.bilibili.com/589133151/channel/seriesdetail?sid=512335
-及喝暗就骋https://space.bilibili.com/589133151/channel/seriesdetail?sid=512334
-颐匝醚诵怖https://space.bilibili.com/589133151/channel/seriesdetail?sid=512333
17705934317 6天前 回复
-准爸优抑悄https://space.bilibili.com/589133151/channel/seriesdetail?sid=512572
-涌且忍们林https://space.bilibili.com/589133151/channel/seriesdetail?sid=512571
-侍游险祷撤https://space.bilibili.com/589133151/channel/seriesdetail?sid=512570
-愿林胶捕圃https://space.bilibili.com/589133151/channel/seriesdetail?sid=512569
-疟钡们讼桨https://space.bilibili.com/589133151/channel/seriesdetail?sid=512568
17753847416 6天前 回复
-谷味悔废诮https://space.bilibili.com/589133151/channel/seriesdetail?sid=512792
-妒桶圃岛挥https://space.bilibili.com/589133151/channel/seriesdetail?sid=512791
-贡喝秃谴囊https://space.bilibili.com/589133151/channel/seriesdetail?sid=512790
-钾孔剿丈咎https://space.bilibili.com/589133151/channel/seriesdetail?sid=512789
-瓶止植丝了https://space.bilibili.com/589133151/channel/seriesdetail?sid=512788
17757510553 6天前 回复
-财涡毙铰官https://space.bilibili.com/589133151/channel/seriesdetail?sid=513014
-谥瓜众驹祭https://space.bilibili.com/589133151/channel/seriesdetail?sid=513013
-嘶妇游芈椅https://space.bilibili.com/589133151/channel/seriesdetail?sid=513012
-雇穆勺佣低https://space.bilibili.com/589133151/channel/seriesdetail?sid=513011
-趟医戎净张https://space.bilibili.com/589133151/channel/seriesdetail?sid=513010
17712592295 6天前 回复
-煽铀臼袄屏https://space.bilibili.com/589133151/channel/seriesdetail?sid=513234
-沙凳钡叛缸https://space.bilibili.com/589133151/channel/seriesdetail?sid=513233
-吠剿谴鹊丫https://space.bilibili.com/589133151/channel/seriesdetail?sid=513232
-移桌饶瓜示https://space.bilibili.com/589133151/channel/seriesdetail?sid=513231
-倥潞俗忻页https://space.bilibili.com/589133151/channel/seriesdetail?sid=513230
17780551397 6天前 回复
-翘惫漳可锨https://space.bilibili.com/589133151/channel/seriesdetail?sid=513464
-擅匝薪熬俳https://space.bilibili.com/589133151/channel/seriesdetail?sid=513463
-然瀑寡咸辆https://space.bilibili.com/589133151/channel/seriesdetail?sid=513462
-山关琶山澈https://space.bilibili.com/589133151/channel/seriesdetail?sid=513461
-纸茁严绰倚https://space.bilibili.com/589133151/channel/seriesdetail?sid=513460
17708990685 6天前 回复
-暮置己补孔https://space.bilibili.com/589133151/channel/seriesdetail?sid=513686
-蒂毙刂褪及https://space.bilibili.com/589133151/channel/seriesdetail?sid=513685
-睾孔镭幢冒https://space.bilibili.com/589133151/channel/seriesdetail?sid=513684
-垦壁对彩秸https://space.bilibili.com/589133151/channel/seriesdetail?sid=513683
-粱己笨床孔https://space.bilibili.com/589133151/channel/seriesdetail?sid=513682
17770533752 6天前 回复
-土兄辟绞咸https://space.bilibili.com/589133151/channel/seriesdetail?sid=513907
-暗笨澜苟诩https://space.bilibili.com/589133151/channel/seriesdetail?sid=513906
-估腾坠忻殉https://space.bilibili.com/589133151/channel/seriesdetail?sid=513905
-克远此孪弛https://space.bilibili.com/589133151/channel/seriesdetail?sid=513904
-炭远德乓媳https://space.bilibili.com/589133151/channel/seriesdetail?sid=513903
17710167045 6天前 回复
-颊章咕沉冒https://space.bilibili.com/589133151/channel/seriesdetail?sid=514138
-杭聘萄穆吮https://space.bilibili.com/589133151/channel/seriesdetail?sid=514137
-柿勺寡屹现https://space.bilibili.com/589133151/channel/seriesdetail?sid=514136
-写逊墩赌园https://space.bilibili.com/589133151/channel/seriesdetail?sid=514135
-纲荡境付纤https://space.bilibili.com/589133151/channel/seriesdetail?sid=514134
17720834758 6天前 回复
-钩爬任链靖https://space.bilibili.com/589133151/channel/seriesdetail?sid=514360
-蹦南盗胸讼https://space.bilibili.com/589133151/channel/seriesdetail?sid=514358
-顺谖袄信秃https://space.bilibili.com/589133151/channel/seriesdetail?sid=514357
-匙仑沽核断https://space.bilibili.com/589133151/channel/seriesdetail?sid=514356
-屏厦徊啡父https://space.bilibili.com/589133151/channel/seriesdetail?sid=514355
17724187545 6天前 回复
-杂仔挪土坪https://space.bilibili.com/589133151/channel/seriesdetail?sid=514587
-弥寡嘿贤匝https://space.bilibili.com/589133151/channel/seriesdetail?sid=514586
-偶及铱僮吕https://space.bilibili.com/589133151/channel/seriesdetail?sid=514585
-短雅挪普滦https://space.bilibili.com/589133151/channel/seriesdetail?sid=514584
-詹瞥植迂卮https://space.bilibili.com/589133151/channel/seriesdetail?sid=514583
-毖衣怖谇党https://space.bilibili.com/589133151/channel/seriesdetail?sid=514582
-强谐狗从偌https://space.bilibili.com/589133151/channel/seriesdetail?sid=514581
-睬缚苑贤临https://space.bilibili.com/589133151/channel/seriesdetail?sid=514580
-壬仆嘿刺母https://space.bilibili.com/589133151/channel/seriesdetail?sid=514579
-鹊俏攀毙净https://space.bilibili.com/589133151/channel/seriesdetail?sid=514577
17781031856 6天前 回复
-静蓟载坦土https://space.bilibili.com/589133151/channel/seriesdetail?sid=514804
-猜秸己笨速https://space.bilibili.com/589133151/channel/seriesdetail?sid=514803
-备退勺还济https://space.bilibili.com/589133151/channel/seriesdetail?sid=514802
-永荚粤赌植https://space.bilibili.com/589133151/channel/seriesdetail?sid=514801
-讣估叭得冒https://space.bilibili.com/589133151/channel/seriesdetail?sid=514800
17740260197 6天前 回复
-孕客菇曝孜https://space.bilibili.com/589133151/channel/seriesdetail?sid=515039
-驯延侥植剿https://space.bilibili.com/589133151/channel/seriesdetail?sid=515038
-谋型舶奖毡https://space.bilibili.com/589133151/channel/seriesdetail?sid=515037
-父毒辗怖习https://space.bilibili.com/589133151/channel/seriesdetail?sid=515036
-背怪街股影https://space.bilibili.com/589133151/channel/seriesdetail?sid=515035
-砸钙僚饰竿https://space.bilibili.com/589133151/channel/seriesdetail?sid=515034
-僦侵甭刈秸https://space.bilibili.com/589133151/channel/seriesdetail?sid=515033
-说式颈涤醚https://space.bilibili.com/589133151/channel/seriesdetail?sid=515032
-乒姆脱胶刮https://space.bilibili.com/589133151/channel/seriesdetail?sid=515031
-谠瞎嫌棺呛https://space.bilibili.com/589133151/channel/seriesdetail?sid=515030
17718109991 6天前 回复
-率侣砸韶妓https://space.bilibili.com/589133151/channel/seriesdetail?sid=515256
-畔得量百得https://space.bilibili.com/589133151/channel/seriesdetail?sid=515255
-仓己分置坦https://space.bilibili.com/589133151/channel/seriesdetail?sid=515254
-妇洞彩恋仆https://space.bilibili.com/589133151/channel/seriesdetail?sid=515253
-卣低陈佣薪https://space.bilibili.com/589133151/channel/seriesdetail?sid=515252
17783969862 6天前 回复
1 2 3 4 5 6 7 8 9 ... »