重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先制作一个纵轴滚动的pageview
创新互联是一家专业从事成都网站设计、网站制作的网络公司。作为专业网络公司,创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站及网站设计开发服务!
然后我们利用time组件实现自动轮播,这里面有个小技巧,掌握了这个小技巧就可以做无缝的循环播放,比如我有 a b c三项,我们在构造pageview item的时候人为的构造成a b c a,在c的后面加上a,当c滚动到a的时候,比如每次动画变换时间是500毫秒,那么就延迟500好秒快速的跳到第一个a页面,刚好等它滚动完就快速变换
在视觉上完全看不出来,这样就造成了无缝循环滚动的假象,同理如果你想反方向也可以无缝循环滚动,那么你在构造pageview item的时候就可以 这样c a b c a构造,只要控制好逻辑,完全没有任何问题
PageView 是一个滑动视图列表,它也是继承至 CustomScrollView 的。
在 PageView 里有三个构造函数:
PageView 有以下常用属性:
本来想要做个这样的,
结果处理PageView的时候就如上图了,以前用Swift开发这样的Page控件的时候用的UIScrollView,有滚动宽度或者高度的设置,所以看到width的时候我是比较兴奋地去查找相关的width属性,当然结果就是没有,单独把PageView部件抽出是没有问题的,但是会是最大高度,好了,问题找到了,高度没有限制好导致PageView无法限制自身的高度,我是在SafeArea中添加的列部件,列中添加行部件,原来是PageView作为列部件的children之一,现在要限制列部件除上面的两行外设置PageView高度最大化,我把PageView放在Expanded中,Expanded作为列部件的children之一,好了问题解决了
Column(
children:[
Widget1,
Widget2,
AspectRatio(aspectRatio: ../..,child:PageView(....))
])
如整个场景全部是分页,则去除Column,改为PageView(),全部重新构建场景,Expanded需要在确定的部件需要足够多的高度或者宽度时使用,
在做一个美女相册flutter demo app的时候发现,每次切换页面的时候,里面的子页面(GridView widget)每次都会重新加载,就像下面这样:
这样的体验肯定不行。经过一番调研后发现竟然还需要做蛮多事情的。
先看看目前的实现:
这个就是包含在PageView里面的子组件,很简单,通过FutureBuilder调一个接口返回数据后build一个GridView。很显然每次切换Tab的时候,应该是每次都进入了_BeautyListWidgetState的build方法,导致每次都会重新刷新。那要怎样才能做到加载后切换不再刷新呢?
需要实现 wantKeepAlive 方法(返回true),另外在build方法最前面需要 调用 super.build(context); ,如下:
所以你需要在initState方法中创建这个Future。如下:
好了。效果实现了。不过稍后还需要看看AutomaticKeepAliveClientMixin源码,看看它是如何做到的。
Reference:
现在的小目标是要实现一个 「图片轮播」的效果,我们在 Android 中可以使用 ViewPager 结合 handler 或者 Timer 去实现。
而我们在 Flutter 中,其实也是类似的。
那么,在 Flutter 中,代替 Android 中的 ViewPager 组件是 PageView ,而且,这个 PageView 相比 ViewPager 扩展性更高。
我们来看一下
Flutter PageView 官网
根据官网的介绍, PageView 在需要展示的页面很多时,有「控件复用」功能,而且,我们还可以通过
来设置滚动的方向,也就是说,我们还可以完成「纵向滚动」,真的很棒有么有?
偷的小米官网的轮播图
看一下效果图
GestureDetector ,或者直接返回一个 button 类型的 Widget 即可
ok,了解了这个PageView,接下来,我们想法子搞一个「轮播效果」,请见下一篇文章。