题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。

重要消息

  • 网易云【玩转大前端】配套课程

  • 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拖动抽屉效果相关推荐

  1. 微信小程序上拉触底案例添加loading效果

    在上拉触底的时候如何添加小程序的loading效果呢??就是左边现实的效果.有一个转动的圈圈 首先我们打开.js文件 在原有的请求颜色的基础上添加wx.showLoading getColors(){ ...

  2. php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多

    一.Flutter实现下拉刷新和上拉分页加载更多 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator.但是没有提供上拉分页加载更多的组件.但是在Flutter Li ...

  3. 【Vue学习总结】22.使用Mint UI的infinite-scroll实现上拉分页加载

    接上篇<21.Vue-UI框架之Mint UI的使用> 上一篇我们讲解了Vue的UI框架Mint UI的使用,本篇我们来通过Mint UI提供的infinite-scroll组件结合api ...

  4. 仿【咪咕动漫】列表下拉刷新上拉加载

    一.概述 本篇续 厦门之旅 的第二篇.这期间找工作真的心态几多变化,刚开始兴致高昂,信心满满,面试了几家不错的公司,结果都是因为工资问题不了了之.后面的连面试机会都没有了,每天在狭小的租房里面吃了睡, ...

  5. Android实现高德地图上拉,ScrollLayout:上拉滑动上滑拖出,类似高德地图百度地图抽屉拖拽效果...

    摘要 在ScrollView或者ListView里面使用ViewPager.支持手势上拉滑出,中途停顿,下滑退出页面,类似高德地图百度地图内场景抽屉拖拽效果效果 Gif动画 类似使用 Demo 下载A ...

  6. Flutter开发之ListView下拉刷新上拉加载更多(35)

    在Flutter开发之ListView组件(21) 文章中,我们了解了ListView组件的基本使用.但是数据比较少,没有涉及分页加载.而实际开发中,下拉刷新和分页加载几乎是所有APP的标配.在iOS ...

  7. Flutter listview下拉刷新 上拉加载更多 功能实现

    下拉刷新 在Flutter中系统已经为我们提供了google material design的刷新功能 , 样式与原生Android一样. 我们可以使用RefreshIndicator组件来实现Flu ...

  8. Flutter学习笔记(18)--Drawer抽屉组件

    如需转载,请注明出处:Flutter学习笔记(18)--Drawer抽屉组件 Drawer(抽屉组件)可以实现类似抽屉拉出和推入的效果,可以从侧边栏拉出导航面板.通常Drawer是和ListView组 ...

  9. 【Flutter】ListView 列表高级功能 ( ScrollController 上拉加载更多 )

    文章目录 一.ScrollController 上拉加载更多 二.ScrollController 使用流程 三.ScrollController 判定滑动到底部 四.完整代码示例 五.相关资源 一. ...

最新文章

  1. [转]web打印实现方案 Lodop6.034 使用方法总结
  2. 5.1软件升级的小阳春
  3. CSS布局——横向两列布局
  4. RTSP流媒体数据传输的两种方式(TCP和UDP)
  5. 招聘webgis开发经理和程序员
  6. HDU 2612 Find a way bfs
  7. WPF中的Pack URI
  8. python项目管理器 宝塔面板 django 404_宝塔面板成功部署Django项目流程(图文)
  9. 微信公众开放平台开发02---微信公众平台PHP接口和java接口对比
  10. 通达信公式-涨幅限制
  11. C++的STL标准库学习(vector)
  12. 【原】上一学年的课程设计
  13. IOS开发-jqeurey mobile
  14. C4:Unity3D制作智能家居设计软件——导入户型图(临摹图)
  15. 字符串进阶——谈谈后缀全家桶(1) 后缀树
  16. 布隆过滤器与布谷鸟过滤器(经典版)
  17. ABAP——smartform添加图片
  18. 塞雷三分钟漫画中国史2
  19. 缘系天涯,一枕残梦千里
  20. C++标准库笔记-多线程-shared_future-future的补充扩展

热门文章

  1. VALSE 2020 线上大会简明日程发布(7月31日-8月5日)
  2. OpenCV开发团队开源计算机视觉标注工具CVAT
  3. 单机装两个mysql_单机环境下安装多个MySQL服务器
  4. 用python偷偷给班级群女同学的颜值进行排名,排最后的 说开学要打爆我
  5. 【OpenCV】OpenCV函数精讲之 -- argc 和argv参数
  6. PyTorch官方教程大更新:增加标签索引,新手更加友好
  7. 深度学习(四十七)DSD正则化训练方法
  8. 村庄规划中核心技术(村土地利用规划方面)
  9. android使用post方法登录,使用REST API使用POST方法在Android中登录示例
  10. 中如何调取api_【技巧】不去腾讯公司也能调取微信交易流水清单