Flutter showDialog 未在 PopupMenuItem 点击上显示

gen*_*ser 8 dart flutter

我正在PopupMenuButton我的应用程序中使用。我想showDialog点击一个PopupMenuItem.

我的PopupMenuItem

PopupMenuItem(
    child: Text("Show dialog"),
    onTap: () { 
        showDialog(
            context: context,
            barrierColor: Colors.black26,
            builder: (context) => AlertDialog( 
            ...
        )
    },
),
Run Code Online (Sandbox Code Playgroud)

onSelected在里面使用也PopupMenuButton不起作用。

Moh*_*hri 18

那是因为 popupMenuItem 的 onTap 尝试使用 Navigator.pop 关闭弹出窗口,但同时您尝试显示对话框,因此它关闭对话框并保留弹出窗口,因此您可以等到所有动画或正在进行的事情完成然后显示对话框

代码:dartPad代码

 PopupMenuItem(
              child: const Text('Item 0'),
              onTap: () {
                WidgetsBinding?.instance?.addPostFrameCallback((_) {
                  showCupertinoDialog(
                      context: context,
                      builder: (context) {
                        return CupertinoAlertDialog(
                          title: const Icon(CupertinoIcons.info_circle),
                          content: const Text(
                            'Hello User, Welcome',
                            textAlign: TextAlign.center,
                          ),
                          actions: [
                            CupertinoDialogAction(
                              isDefaultAction: true,
                              onPressed: () => Navigator.pop(context),
                              child: const Text('Thanks'),
                            ),
                          ],
                        );
                      });
                });
              }),
Run Code Online (Sandbox Code Playgroud)


Ham*_*med 9

试试这个:

PopupMenuItem(
  child: Text("Show dialog"),
  onTap: () { 
      Future<void>.delayed(
        Duration.zero,
        () => showDialog(
              context: context,
              barrierColor: Colors.black26,
              builder: (context) => AlertDialog(...),
        ),
    ),
  },
);
Run Code Online (Sandbox Code Playgroud)