当前位置: 首页 > 编程笔记 >

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

宫高义
2023-03-14
本文向大家介绍flutter PageView实现左右滑动切换视图,包括了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),
  );
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Android实现微信首页左右滑动切换效果,包括了Android实现微信首页左右滑动切换效果的使用技巧和注意事项,需要的朋友参考一下 大家看到微信首页切换效果有没有觉得很炫,滑动切换,点击底部bar瞬间切换,滑动切换渐变效果,线上效果图: 之前也在博客上看到别人的实现,再次基础上,我做了些优化。首先说下实现原理,大神略过,o(╯□╰)o 页面上看到的三个页面是三个Fragment,

  • 本文向大家介绍Android ViewPager撤消左右滑动切换功能实现代码,包括了Android ViewPager撤消左右滑动切换功能实现代码的使用技巧和注意事项,需要的朋友参考一下 最近做项目要求某种情况下ViewPager不能滑动,那么我们只需要重写这个方法就可以禁止ViewPager滑动。下面通过本文给大家ViewPager取消左右滑动切换功能的实例代码,具体代码如下所示: IndexV

  • 本文向大家介绍jQuery实现左右切换焦点图,包括了jQuery实现左右切换焦点图的使用技巧和注意事项,需要的朋友参考一下 演示图: 代码: 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍Android开发之使用ViewPager实现图片左右滑动切换效果,包括了Android开发之使用ViewPager实现图片左右滑动切换效果的使用技巧和注意事项,需要的朋友参考一下 Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~: 使用了3个xml文件作为ViewPager的滑动page,布局都

  • 本文向大家介绍jq实现左侧显示图片右侧文字滑动切换效果,包括了jq实现左侧显示图片右侧文字滑动切换效果的使用技巧和注意事项,需要的朋友参考一下 分享一款jQuery左侧图片右侧文字滑动切换代码。这是一款基于jQuery实现的列表图片控制图片滑动切换代码。效果图如下: 下面给大家分享下基于jq实现左侧显示图片右侧文字滑动切换效果,用div+css布置表单借用jq实现特效,具体不多说了,请看下面代码。

  • 本文向大家介绍js实现多图左右切换功能,包括了js实现多图左右切换功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js多图左右切换功能,供大家参考,具体内容如下 效果图:  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。