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