单击弹出项目时未显示警报对话框。有啥解决办法吗?
Posted
技术标签:
【中文标题】单击弹出项目时未显示警报对话框。有啥解决办法吗?【英文标题】:Alert Dialogue is not showing on popup item click. Any solution?单击弹出项目时未显示警报对话框。有什么解决办法吗? 【发布时间】:2022-01-16 23:28:18 【问题描述】:这是我的 PopupMenuButton
PopupMenuButton(
icon:
Icon(Icons.more_vert, color: Colors.white),
itemBuilder: (context) => [
PopupMenuItem(
onTap: ()
showMyDialog();
,
child: Text(
"Edit Profile Picture",
style: TextStyle(
color: AppColors.pinkColor),
),
value: 1,
),
PopupMenuItem(
child: Text(
"Edit Cover Picture",
style: TextStyle(
color: AppColors.pinkColor),
),
value: 2,
),
PopupMenuItem(
child: Text(
"Setting",
style: TextStyle(
color: AppColors.pinkColor),
),
value: 3,
)
])
这是我的对话功能
Future<void> _showMyDialog() async
return showDialog<void>(
context: context,
barrierDismissible: false, // user must tap button!
builder: (BuildContext context)
return AlertDialog(
title: const Text('AlertDialog Title'),
content: SingleChildScrollView(
child: ListBody(
children: const <Widget>[
Text('This is a demo alert dialog.'),
Text('Would you like to approve of this message?'),
],
),
),
actions: <Widget>[
TextButton(
child: const Text('Approve'),
onPressed: ()
Navigator.of(context).pop();
,
),
],
);
,
);
【问题讨论】:
你的方法声明是_showMyDialog()
,而你的调用是showMyDialog()
,没有_
。尝试在声明函数时调用它。
【参考方案1】:
点击PopupMenuButton
上的任何项目以关闭它后,PopupMenuItem
的onTap
调用Navigator.pop
。
void handleTap()
widget.onTap?.call();
Navigator.pop<T>(context, widget.value);
当您点击该项目时,它会显示_showMyDialog()
,但由于调用了Navigator.pop
而立即关闭它,这就是为什么您会发现PopupMenuItem
在点击后打开。
只是Navigator.pop
正在关闭showDialog
而不是PopupMenuButton
的项目。我们可以提供一些延迟来关闭PopupMenuItem
,然后可以调用_showMyDialog();
PopupMenuItem(
onTap: ()
Future.delayed(Duration.zero).then((value)
_showMyDialog();
);
,
【讨论】:
非常感谢 Yeasin Sheikh 随意接受作为答案【参考方案2】:假设如果您将函数声明为_showMyDialogue()
,那么在调用该函数时应该使用_showMyDialogue()
。在您的情况下,您在调用它时忽略了“_”。这就是问题所在。
【讨论】:
解决不了问题 任何错误信息?? 不会有错误信息,但是看不到对话框。 请在发布答案之前测试问题。我不喜欢对某人宝贵的时间投反对票。 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于单击弹出项目时未显示警报对话框。有啥解决办法吗?的主要内容,如果未能解决你的问题,请参考以下文章