Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 仅长按颤振弹出菜单按钮_Flutter_Long Press_Popupmenubutton - Fatal编程技术网

Flutter 仅长按颤振弹出菜单按钮

Flutter 仅长按颤振弹出菜单按钮,flutter,long-press,popupmenubutton,Flutter,Long Press,Popupmenubutton,我试图在一个自定义小部件上显示一个菜单上下文,这个小部件是我在长按时创建的(点击有另一种行为) 我尝试将GestureDetector与onLongPress一起使用,并使用函数showMenu,但它在角落中显示菜单,而不是在按下的小部件上。我已经看到了一种解决方法,可以获得小部件的位置并将其传递到showMenu,但在我看来它看起来很混乱 return new GestureDetector( child: _defaultBuild(), onTap: onTap,

我试图在一个自定义小部件上显示一个菜单上下文,这个小部件是我在长按时创建的(点击有另一种行为)

我尝试将GestureDetector与onLongPress一起使用,并使用函数showMenu,但它在角落中显示菜单,而不是在按下的小部件上。我已经看到了一种解决方法,可以获得小部件的位置并将其传递到showMenu,但在我看来它看起来很混乱

 return new GestureDetector(
    child: _defaultBuild(),
    onTap: onTap,
    onLongPress: () {
      showMenu(
        items: <PopupMenuEntry>[
          PopupMenuItem(
            //value: this._index,
            child: Row(
              children: <Widget>[
                Text("Context item1")
              ],
            ),
          )
        ],
        context: context,
        position: _getPosition(context)
      );
    }
);
RelativeRect _getPosition(BuildContext context) {
  final RenderBox bar = context.findRenderObject();
  final RenderBox overlay = Overlay.of(context).context.findRenderObject();
  final RelativeRect position = RelativeRect.fromRect(
  Rect.fromPoints(
    bar.localToGlobal(bar.size.bottomRight(Offset.zero), ancestor: overlay),
    bar.localToGlobal(bar.size.bottomRight(Offset.zero), ancestor: overlay),
  ),
  Offset.zero & overlay.size,
);
return position;
}
返回新的手势检测器(
子项:_defaultBuild(),
onTap:onTap,
onLongPress:(){
展示菜单(
项目:[
PopupMenuItem(
//值:此.\u索引,
孩子:排(
儿童:[
文本(“上下文项1”)
],
),
)
],
上下文:上下文,
位置:_getPosition(上下文)
);
}
);
相对竖立_getPosition(构建上下文){
final RenderBox bar=context.findenderObject();
final RenderBox overlay=overlay.of(context.context.findenderobject();
最终相对竖立位置=相对竖立.fromRect(
矩形起点(
bar.localToGlobal(bar.size.bottomRight(Offset.zero),祖先:overlay),
bar.localToGlobal(bar.size.bottomRight(Offset.zero),祖先:overlay),
),
Offset.zero和overlay.size,
);
返回位置;
}
我也尝试过使用PopupMenuButton,但我无法仅在长按时显示菜单

有什么想法吗?

复制到复制到