前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter | 可能是目前最好用的仿微信聊天长按弹出框 WPopupMenu

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

作者头像
Flutter笔记
发布2019-08-14 20:22:29
2.8K0
发布2019-08-14 20:22:29
举报
文章被收录于专栏:Flutter笔记Flutter笔记

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

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

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

WPopupMenu

话不多说,先上图:

构造函数

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

代码语言:javascript
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WPopupMenu
    • 构造函数
      • 如何使用
      • 最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档