flutter上拉抽屉效果 flutter拖动抽屉效果
题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。
重要消息
网易云【玩转大前端】配套课程
EDU配套 教程
Flutter开发的点滴积累系列文章
示例一
示例二
1、 抽屉关闭状态时点击标签抽屉会向上打开,也可配置关闭这个功能;
2、 抽屉关闭状态时,向上滑动,滑动过一定的高度时自动向上滑动打开,当没有滑动过一定的高度时,自动向下滑动,呈关闭状态;
3、 抽屉打开状态时,当滑动视图处于顶部时,向下滑动,抽屉自动向下滑动关闭,可配置形状是否开启这个功能
4、 抽屉打开状态时,当向下滑动抽屉时,没有滑动到一定的距离时放开,抽屉会自动向上滑动回到打开状态,当滑动到一定的距离时放开,抽屉会自动向下滑动到关闭状态;
5、 抽屉关闭状态时,向上轻扫抽屉,抽屉会向上滑动到打开状态,当抽屉打开状态时,向下轻扫,抽屉会向下滑动到关闭状态。
实现抽屉效果,技术内容涉及如下:
1、 手势的拖动
2、 轻扫手势的识别
3、 Transform的视图移动
4、 AnimationController的过渡
5、 NotificationListener监听滑动组件的处理
6、 DragController控制器自定义监听回调实现A调用B
1 添加依赖
小编以将这个效果封装成一个DragContainer组件,在这里使用drag_container依赖库,小编已将这个效果封装成依赖库供大家使用。
实际项目首先是引用依赖,通过pub仓库添加依赖,代码如下:最新版本查看这里
dependencies:drag_container: ^1.0.1
或者是通过github方式添加依赖,代码如下:
dependencies:drag_container:git:url: https://github.com/zhaolongs/drag_container.gitref: master
然后加载依赖,代码如下:
flutter pub get
然后在使用的地方导包,代码如下:
import 'package:drag_container/drag_container.dart';
然后就可以使用 DragContainer 抽屉布局。
2 DragContainer抽屉视图基本使用
如上图所示的效果,为抽屉视图浮在主视图的上层,所以页面主体内容可考虑使用层叠布局,代码如下:
///上拉抽屉效果
class BottomDragWidget extends StatefulWidget {@overrideState<StatefulWidget> createState() {return BottomDragWidgetState();}
}class BottomDragWidgetState extends State {///滑动控制器ScrollController scrollController = new ScrollController();///抽屉控制器DragController dragController = new DragController();@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("抽屉效果"),),backgroundColor: Colors.grey,///页面主体使用层叠布局body: Stack(children: <Widget>[/// ... ... 页面中其他的视图///抽屉视图buildDragWidget(),],),);}... ... 省略
}
在这里也声明创建了一个ScrollController ,用于抽屉视图中的滑动视图,声明的抽屉控制器DragController 用来控制抽屉的打开与关闭,代码如下:
///关闭抽屉dragController.close();///打开抽屉dragController.open();
buildDragWidget方法就是用来创建DragContainer 抽屉组件的方法,
///构建底部对齐的抽屉效果视图Widget buildDragWidget(){///层叠布局中的底部对齐return Align(alignment: Alignment.bottomCenter,child: DragContainer(///抽屉关闭时的高度 默认0.4initChildRate: 0.1,///抽屉打开时的高度 默认0.4maxChildRate: 0.4,///是否显示默认的标题isShowHeader: true,///背景颜色backGroundColor: Colors.white,///背景圆角大小cornerRadius: 12,///自动上滑动或者是下滑的分界值maxOffsetDistance:1.5,///抽屉控制器controller: dragController,///滑动控制器scrollController: scrollController,///自动滑动的时间duration: Duration(milliseconds: 800),///抽屉的子WidgetdragWidget: buildListView(),///抽屉标题点击事件回调dragCallBack: (isOpen){ },),);}
在这里通过buildListView方法来构建了一个抽屉中使用的滑动视图ListView,需要注意的是,抽屉视图中一般都使用滑动视图,代码如下:
///可滑动布局构建 这里是一个列表ListViewbuildListView() {return ListView.builder(///列表的控制器 与抽屉视图关联controller: scrollController,///需要注意的是这里的控制器需要使用///builder函数中回调中的 控制器itemCount: 20,itemBuilder: (BuildContext context, int index) {return InkWell(onTap: () {print("点击事件 $index");///关闭抽屉dragController.close();},child: ListTile(title: Text('测试数据 $index')));},);}
运行效果如下:
flutter上拉抽屉效果 flutter拖动抽屉效果相关推荐
- 微信小程序上拉触底案例添加loading效果
在上拉触底的时候如何添加小程序的loading效果呢??就是左边现实的效果.有一个转动的圈圈 首先我们打开.js文件 在原有的请求颜色的基础上添加wx.showLoading getColors(){ ...
- php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多
一.Flutter实现下拉刷新和上拉分页加载更多 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator.但是没有提供上拉分页加载更多的组件.但是在Flutter Li ...
- 【Vue学习总结】22.使用Mint UI的infinite-scroll实现上拉分页加载
接上篇<21.Vue-UI框架之Mint UI的使用> 上一篇我们讲解了Vue的UI框架Mint UI的使用,本篇我们来通过Mint UI提供的infinite-scroll组件结合api ...
- 仿【咪咕动漫】列表下拉刷新上拉加载
一.概述 本篇续 厦门之旅 的第二篇.这期间找工作真的心态几多变化,刚开始兴致高昂,信心满满,面试了几家不错的公司,结果都是因为工资问题不了了之.后面的连面试机会都没有了,每天在狭小的租房里面吃了睡, ...
- Android实现高德地图上拉,ScrollLayout:上拉滑动上滑拖出,类似高德地图百度地图抽屉拖拽效果...
摘要 在ScrollView或者ListView里面使用ViewPager.支持手势上拉滑出,中途停顿,下滑退出页面,类似高德地图百度地图内场景抽屉拖拽效果效果 Gif动画 类似使用 Demo 下载A ...
- Flutter开发之ListView下拉刷新上拉加载更多(35)
在Flutter开发之ListView组件(21) 文章中,我们了解了ListView组件的基本使用.但是数据比较少,没有涉及分页加载.而实际开发中,下拉刷新和分页加载几乎是所有APP的标配.在iOS ...
- Flutter listview下拉刷新 上拉加载更多 功能实现
下拉刷新 在Flutter中系统已经为我们提供了google material design的刷新功能 , 样式与原生Android一样. 我们可以使用RefreshIndicator组件来实现Flu ...
- Flutter学习笔记(18)--Drawer抽屉组件
如需转载,请注明出处:Flutter学习笔记(18)--Drawer抽屉组件 Drawer(抽屉组件)可以实现类似抽屉拉出和推入的效果,可以从侧边栏拉出导航面板.通常Drawer是和ListView组 ...
- 【Flutter】ListView 列表高级功能 ( ScrollController 上拉加载更多 )
文章目录 一.ScrollController 上拉加载更多 二.ScrollController 使用流程 三.ScrollController 判定滑动到底部 四.完整代码示例 五.相关资源 一. ...
最新文章
- [转]web打印实现方案 Lodop6.034 使用方法总结
- 5.1软件升级的小阳春
- CSS布局——横向两列布局
- RTSP流媒体数据传输的两种方式(TCP和UDP)
- 招聘webgis开发经理和程序员
- HDU 2612 Find a way bfs
- WPF中的Pack URI
- python项目管理器 宝塔面板 django 404_宝塔面板成功部署Django项目流程(图文)
- 微信公众开放平台开发02---微信公众平台PHP接口和java接口对比
- 通达信公式-涨幅限制
- C++的STL标准库学习(vector)
- 【原】上一学年的课程设计
- IOS开发-jqeurey mobile
- C4:Unity3D制作智能家居设计软件——导入户型图(临摹图)
- 字符串进阶——谈谈后缀全家桶(1) 后缀树
- 布隆过滤器与布谷鸟过滤器(经典版)
- ABAP——smartform添加图片
- 塞雷三分钟漫画中国史2
- 缘系天涯,一枕残梦千里
- C++标准库笔记-多线程-shared_future-future的补充扩展
热门文章
- VALSE 2020 线上大会简明日程发布(7月31日-8月5日)
- OpenCV开发团队开源计算机视觉标注工具CVAT
- 单机装两个mysql_单机环境下安装多个MySQL服务器
- 用python偷偷给班级群女同学的颜值进行排名,排最后的 说开学要打爆我
- 【OpenCV】OpenCV函数精讲之 -- argc 和argv参数
- PyTorch官方教程大更新:增加标签索引,新手更加友好
- 深度学习(四十七)DSD正则化训练方法
- 村庄规划中核心技术(村土地利用规划方面)
- android使用post方法登录,使用REST API使用POST方法在Android中登录示例
- 中如何调取api_【技巧】不去腾讯公司也能调取微信交易流水清单