我正在使用 Flutter 的
MenuAnchor
在用户右键单击某个项目时显示上下文菜单。
问题是,如果用户打开上下文菜单,然后右键单击另一个项目 - 现在会同时显示 2 个上下文菜单(可能重叠)。
理想情况下,我希望 MenuAnchor 小部件中的任何打开的菜单在新菜单打开时关闭,以便只显示 1。
我曾考虑过将
MenuController
的状态拉到小部件树上,以便在对新对象调用 open()
之前将它们全部关闭,但是我更喜欢一种更干净的解决方案,因为可能有数百或数千个此类对象每个人都有自己的MenuController
。
答案是我在上下文菜单中使用了错误的小部件。
而是使用 ContextMenuController,它会自动确保只有 1 个打开的上下文菜单,并且还提供静态方法
ContextMenuController.removeAny()
来关闭所有打开的上下文菜单。