Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flutter | 可能是目前最好用的仿微信聊天长按弹出框 WPopupMenu

Flutter | 可能是目前最好用的仿微信聊天长按弹出框 WPopupMenu

作者头像
Flutter笔记
发布于 2019-08-14 12:22:29
发布于 2019-08-14 12:22:29
3K00
代码可运行
举报
文章被收录于专栏:Flutter笔记Flutter笔记
运行总次数:0
代码可运行

很多用 iOS 的小伙伴都用过该功能:

微信聊天窗口,长按某一条消息,弹出弹框,选择「复制、转发...」等等。

基于这个需求,我封装了一个 「WPopupMenu」。

WPopupMenu

话不多说,先上图:

构造函数

还是老样子,我们先来看构造函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WPopupMenu({
  @required this.onValueChanged,
  @required this.actions,
  @required this.child,
  this.pressType = PressType.longPress,
  this.pageMaxChildCount = 5,
})  : assert(onValueChanged != null),
assert(actions != null && actions.length > 0),
assert(child != null);

解释一下参数:

1.onValueChanged:是点击选中了某一个 action 时候的回调,返回值是一个 int,如果没有选中,点击空白处了,则会返回一个 null2.actions:类型是一个 List,也就是上图看到的 「转发,复制」等等文案3.child:不用多说了4.pressType:点击事件,有两种,长按触发 还是 单击触发5.pageMaxChildCount:弹出框里最多能有几个 action,默认为 5 个,如果最后一页不足 5 个,那么则剩下的几个会平分空间(和微信的逻辑是一样的)

如何使用

直接在需要使用该控件的地方套上,就能使用了,简单代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WPopupMenu(
  onValueChanged: (int value) {
    /// showSnackBar
  },
  actions: actions,
  child: Container(
    /// 省略...
  ),
),

代码文件名叫:「widget_w_popup_menu.dart」,

具体 Demo 在:「popup_route_page.dart」。

最后

后面我会出一篇关于该组件的封装逻辑,敬请期待。

关于该组件,还有几处未完善:

1.弹出框下面的三角2.在最顶端的时候应向下弹出

完整代码已经传至GitHub:https://github.com/wanglu1209/WFlutterDemo

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Flutter笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flutter | 超实用简单菜单弹出框 PopupMenuButton
幸运的是,Flutter 提供给我们了一个 Widget,直接就能实现如上的效果。
Flutter笔记
2019/08/09
6.1K0
Flutter | 思路解析 WPopupMenu 仿微信聊天长按弹出菜单
1.如果 child 的长度大于 menu 的长度,那么则把 menu 放在中间2.如果 child 的长度小于 menu 的长度,三角形的位置在 child 的中间
Flutter笔记
2019/08/19
5.2K0
Flutter | 求求你们了,切换 Widget 的时候加上动画吧
那如何在 Flutter 当中切换 Widget 的时候加上特效?完成这样的效果?
Flutter笔记
2019/07/30
3.1K0
Flutter | 求求你们了,切换 Widget 的时候加上动画吧
Flutter 史上最牛拖动控件 Draggable
我们定义一个 GridView,里面每一个 item 都是一个 Draggable。
Flutter笔记
2019/07/24
3.6K0
Flutter 史上最牛拖动控件 Draggable
Flutter AnimatedIcon 了解一下
•icon:通过官方解释可以看得出来,它应该是 AnimatedIcons.xxx•progress:在该字段的上方,注释也给出了解释:动画的进度,值应该是0-1•color:icon 的颜色•size:icon的大小•semanticLabel: 语义标签,不在UI中显示,在辅助功能模式下有用。•textDirection:图标的方向
Flutter笔记
2019/07/25
2K0
Flutter | AnimatedCrossFade - 交叉淡入 Widget
看到这个标题的时候,有没有同学想到了一篇文章:Flutter | 求求你们了,切换 Widget 的时候加上动画吧![1]
Flutter笔记
2020/06/05
2K0
Flutter DropdownButton简单使用及魔改源码
前面讲过 ExpansionPanel, ExpansionPanel大部分情况用来实现展开列表等稍微复杂的业务逻辑。
Flutter笔记
2019/07/25
4.6K1
Flutter 约束宽高比的控件 AspectRatio
撸码前有个点要注意一下,文档上面说了, 该widget 首先会尝试布局约束所允许的最大宽度。
Flutter笔记
2019/07/25
2.9K0
Flutter ExpansionPanel 超级实用展开控件
类似于这种,Flutter 给我们提供了相当便捷的 UI 组件 ExpansionPanel。
Flutter笔记
2019/07/25
6.4K0
Flutter 封装一个 Banner 轮播图
1.可以自定义高度和一些属性2.展示图片3.自动翻页播放4.点击事件5.指示器6.人为拖动的时候关闭自动播放
Flutter笔记
2019/07/30
3.1K0
Flutter 封装一个 Banner 轮播图
Flutter | 自定义一个 Stepper 步骤组件
因为当时了解过 Material 组件库里有一个 Stepper 控件,是类似的效果,我就和他说,可以魔改一下 Stepper,感觉应该不难,然后他回过来了一个这个表情:
Flutter笔记
2019/08/02
3.5K1
​Flutter实战 | 从 0 搭建「网易云音乐」APP(八、我的页面)
本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来。
Flutter笔记
2019/11/12
1.6K0
Flutter lesson 7: Flutter组件之基础组件(三)
上一节我们介绍了Row, Column, Image, Text四个基础组件,这一节我们来看看下面几个组件。
踏浪
2019/07/31
1.6K0
Flutter lesson 7: Flutter组件之基础组件(三)
【Flutter】StatefulWidget 组件 ( FloatingActionButton 组件 | RefreshIndicator 组件 )
FloatingActionButton 构造函数源码 : 在构造函数的可选参数中 , 可以查询该组件可设置的参数选项 ;
韩曙亮
2023/03/28
3.1K0
【Flutter】StatefulWidget 组件 ( FloatingActionButton 组件 | RefreshIndicator 组件 )
Flutter实战 | 从 0 搭建「网易云音乐」APP(九、搜索页面、底部播放控制栏)
本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来。
Flutter笔记
2019/12/06
2.6K0
Flutter实战 | 从 0 搭建「网易云音乐」APP(九、搜索页面、底部播放控制栏)
Flutter 组件集录 | 3.7 新增 - ContextMenu 菜单
Context 菜单算是对弹出框的一个特性支持,特别对于桌面端来说,让 右键弹出工具框 的处理更加简便。比如下方所示,是 AndroidStudio 中右键时弹出的工具:
张风捷特烈
2023/02/15
2.1K0
Flutter 组件集录 | 3.7 新增 - ContextMenu 菜单
Flutter 入门指北之快速搭建界面(含Flutter知识体系)
完整版脑图,后台回复 “Flutter” 关键字,关注 码个蛋(codeegg)会持续更新本系列文章.
陈宇明
2020/12/16
1.8K0
Flutter 页面交互 | 路由跳转方式、常用API、发送接收数据、可能发生的问题与知识点拓展
【pushAndRemoveUntil与pushNamedAndRemoveUntil区别】
凌川江雪
2020/06/29
4K0
Flutter 页面交互 | 路由跳转方式、常用API、发送接收数据、可能发生的问题与知识点拓展
Flutter技术与实战(5)
##### 从原生页面跳转至Flutter页面 * Flutter 本身依托于原生提供的容器(iOS 为 FlutterViewController,Android 为 Activity 中的 FlutterView),所以我们通过初始化 Flutter 容器,为其设置初始路由页面之后,就可以以原生的方式跳转至 Flutter 页面了。
八归少年
2022/06/29
16.1K0
Flutter技术与实战(5)
推荐阅读
相关推荐
Flutter | 超实用简单菜单弹出框 PopupMenuButton
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验