温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 移动开发 > 
  • flutter PageView实现左右滑动切换视图

flutter PageView实现左右滑动切换视图

发布时间:2020-10-11 00:59:38 来源:脚本之家 阅读:540 作者:早起的年轻人 栏目: 移动开发

本文实例为大家分享了flutter PageView左右滑动切换视图的具体代码,供大家参考,具体内容如下

flutter PageView实现左右滑动切换视图

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),
  );
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。

向AI问一下细节
推荐阅读:
  1. 如何使用Flutter开发抖音国际版
  2. 如何实现flutter仿微信底部图标渐变功能

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

flutter pageview 滑动切换
  • 上一篇新闻:
    关于CmsEasy数据库配置文件修改路径说明
  • 下一篇新闻:
    ORACLE存储过程in关键字使用

猜你喜欢

  • win10怎么关闭任务栏预览小窗口
  • c++父类指针怎么指向子类对象
  • java中怎么调用类中的数组
  • PHP array_push()函数的功能有哪些
  • Android RadioGroup控件怎么使用
  • win10任务窗口并排显示的方法是什么
  • win10提示0xc0000142错误怎么修复
  • c语言usleep函数的作用是什么
  • java调用本类的方法是什么
  • php怎么获取input内容
最新资讯
  • 在Spring Security中什么是CSRF攻击如何防御
  • 如何在Spring MVC应用中使用WebSockets进行实时通信
  • 解释Spring框架中的`@Profile`注解及其用途
  • Spring Boot中的Environment抽象是如何工作的
  • 在Spring Data中如何自定义存储库接口以添加自定义方法
  • Spring Security框架中的权限继承是如何工作的
  • 如何在Spring Boot应用中使用Lombok库简化代码
  • Spring Boot应用的启动流程是怎样的
  • 如何在Spring MVC中通过RedirectAttributes传递重定向后的数据
  • Spring Cloud Sleuth是如何与Zipkin集成来实现分布式追踪的
相关推荐
  • 利用Flutter怎么实现一个走马灯布局
  • Flutter实现可循环轮播图效果
  • Flutter实现App功能引导页
  • 使用Flutter怎么实现一个可以缩放拖拽的图片
  • Flutter pageview切换指示器的实现代码
  • 怎么实现PageView滑动视图Flutter
  • 如何使用Flutter实现一个走马灯布局
  • flutter PageView怎样实现左右滑动切换视图
  • 如何使用Flutter实现App功能引导页
  • Flutter怎么实现滚动选择数字

相关标签

glutsolidsphere solution resolution luts absolute absolutelayout glut flutter开发教程 flutter widgets xlutils sdwebimage uialertview preview windowmanager agen videoview cview managed listview高度 loadingview
AI

深圳SEO优化公司池州seo网站优化岳阳seo优化价格龙岩网站优化按天计费推荐嘉兴百度seo多少钱辽阳网站搜索优化池州网站推广系统推荐怀化百度爱采购光明网站搜索优化哪家好深圳网站设计哪家好阳泉网络营销推荐昆明百度标王哪家好咸阳网络广告推广报价百色模板网站建设淮安百度竞价包年推广价格乐山外贸网站制作庆阳SEO按天扣费价格北京营销网站价格漳州百度seo推荐驻马店网站搜索优化多少钱大浪网站优化排名报价驻马店网站关键词优化价格平湖营销网站推荐朝阳推广网站多少钱贺州网站优化排名推荐韶关网络推广推荐蚌埠网站推广方案推荐潍坊网页制作哪家好扬州高端网站设计推荐通辽关键词排名推荐遂宁网站制作歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化