如何从第二个小部件打开弹出菜单?
final button = new PopupMenuButton(
itemBuilder: (_) => <PopupMenuItem<String>>[
new PopupMenuItem<String>(
child: const Text('Doge'), value: 'Doge'),
new PopupMenuItem<String>(
child: const Text('Lion'), value: 'Lion'),
],
onSelected: _doSomething);
final tile = new ListTile(title: new Text('Doge or lion?'), trailing: button);
我想通过点击tile
打开button
的菜单。
7条答案
按热度按时间bxjv4tth1#
这是可行的,但不够优雅(并且具有与上面Rainer的解决方案相同的显示问题:
我怀疑您实际上要求的是类似于https://github.com/flutter/flutter/issues/254或https://github.com/flutter/flutter/issues/8277跟踪的功能--将标签与控件关联并使标签可单击的能力--这是Flutter框架中缺少的一个功能。
r7s23pms2#
我认为这样做会更好,而不是显示一个PopupMenuButton
有时您会希望在按下按钮的位置显示**_showPopupMenu*****请使用GestureDetector执行此操作
然后_showPopupMenu将显示为
slmsl1lt3#
屏幕截图:
完整代码:
xbp102n04#
我找到了一个解决你问题的方法。你可以为PopupMenuButton提供一个子控件,它可以是任何包括ListTile的Widget(见下面的代码)。唯一的问题是PopupMenu在ListTile的左侧打开。
8ljdwjyq5#
我不认为有一种方法可以实现这种行为。虽然你可以附加一个
onTap
属性到图块,但你不能从“外部”访问MenuButton您可以采用的一种方法是使用ExpansionPanels,因为它们看起来像ListTiles,旨在允许轻松修改和编辑。
yruzcnhs6#
如果你使用的是材料
showMenu
,但你的菜单不能正常工作或在错误的地方打开按照我的答案。此答案基于Vishal Singh的答案。
在
GestureDetector
中,使用onLongPressStart
或onTapUp
向函数发送偏移量。onLongPress相当于onLongPressStart(并在其后立即呼叫)。
onTapUp,它与onTap同时调用,但包含有关指针位置的详细信息。
对于菜单位置,请执行以下操作
全码
oyxsuwqo7#