美文网首页Flutter圈子
Flutter中如何获取手势位置

Flutter中如何获取手势位置

作者: Rreply | 来源:发表于2019-01-14 13:21 被阅读22次

    今天遇到一个需求,在ListView中长按每个Item就弹出一个带有删除字样的PopUpMenuItem。类似于下图所示:


    弹出删除按钮

    对每个Item使用GestureDetector包裹之后,发现其OnLongPress方法中不提供位置信息。
    但是翻了源码之后,发现onPanDown好像可以使用。

    /// A pointer has contacted the screen and might begin to move.
      final GestureDragDownCallback onPanDown;
    

    所以我们可以在onPanDown中获取位置,然后在onLongPress中使用这个位置。


    测试

    然后就能够使用这个位置信息来展示PopUpItem了。
    完整源码如下

    //获取点击的位置
          onPanDown: (details) {
            x = details.globalPosition.dx;
            y = details.globalPosition.dy;
          },
          onLongPress: () async{
            if (Platform.isAndroid){
              final result = await showMenu(
                  context: context,
                  items: [PopupMenuItem(child: Text("删除"), value: ItemType.delete,)],
                  position: RelativeRect.fromLTRB(
                      x, y - 50, MediaQuery.of(context).size.width - x, 0));
              if (result == ItemType.delete){
                setState(() {
                    //执行删除数据操作
                  });
              }
            }
          },
    

    相关文章

      网友评论

        本文标题:Flutter中如何获取手势位置

        本文链接:https://www.haomeiwen.com/subject/immddqtx.html