我试图在我长按创建的自定义小部件上显示菜单上下文(在点击时会有其他行为)。
我尝试将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;
}
我也尝试过使用PopupMenuButton,但无法在onLongPressed上显示菜单。
有什么想法吗?