Flutter圈子

Flutter中如何获取手势位置

2019-01-14  本文已影响22人  Rreply

今天遇到一个需求,在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(() {
                //执行删除数据操作
              });
          }
        }
      },
上一篇下一篇

猜你喜欢

热点阅读