showMenu(
context: context,
position: RelativeRect.fromLTRB(5000, appBar.preferredSize.height + statusBarHeight!, 0.0, 0.0),
items: [
PopupMenuItem(
child: Text('Cancel'),
value: 0,
onTap: () {
cancelDialog();
},
),
],
);
cancelDialog() {
return () {
showDialog(
context: context,
builder: (BuildContext context) => OrderCancel(order!.orderId!),
);
};
}
cancelDialog无法使用以前的代码打开。但它的打开正确地从另一个按钮点击
7条答案
按热度按时间zyfwsgd61#
试试这个
lzfw57am2#
我今天遇到了同样的问题,几分钟后,我意识到你不能使用onTap。您必须使用PopupMenuButton的onSelected。
参见:enter link description here
s2j5cfk03#
您可以使用PopupMenuButton
uemypmqf4#
您可以检查以下步骤:
1.为了进行研究,我们需要一个最小的可运行的复制文件,这样我们就可以将代码复制到一个新项目的lib/main.dart中,然后运行复制文件
1.如果没有更多的信息,我们很遗憾不知道如何解决这个问题。因此,我们现在不情愿地关闭这个bug。如果您有任何更多的信息,请不要犹豫,对错误发表评论;我们马上重新开放!感谢您的贡献。
1.您的itemBuilder函数不返回任何内容。它缺少return关键字。
3duebb1j5#
我今天也遇到了同样的问题。在调试时,我知道在执行onTap方法后,
Navigator.of(context).pop();
会被调用一次。这就是为什么你的cancelDialog是不可见的。实际上,它是在调用showDialog方法时打开的,但它也会很快弹出。对于解决方案,您只需调用cancelDialog
方法两次。因此,即使后一个弹出,前一个仍然在屏幕上可见。用上面的方法替换旧的onTap方法就可以了。
u91tlkcl6#
您可以遵循此解决方案:enter link description here
简而言之,您应该将函数变形为:
hpcdzsge7#
根据这个答案,PopUpMenuItem的onTap函数必须按如下所示调用,而不是直接调用showDialog。相反,首先调用widgetsBidingInstance,以便在调用ontap函数后显示对话框,该函数在点击时关闭PopUpMenuItem。