颤振-选择项目后,弹出菜单不会关闭

时间:2018-07-16 12:56:53

标签: flutter

我正在尝试Flutter,而PopupMenuButton遇到了问题。在菜单中选择一个项目后,我将显示一个没有菜单的新屏幕,并且在向后导航后,弹出菜单仍处于打开状态-如以下屏幕截图所示:

Popup menu Edit profile

从编辑配置文件屏幕(第二个屏幕截图)导航回到帐户屏幕(第一个屏幕截图)后,弹出菜单仍然打开。我希望将其关闭。我在应用栏内创建弹出菜单的相关代码:

      actions: <Widget>[
    new PopupMenuButton(
      itemBuilder: (BuildContext context) {
        return <PopupMenuEntry>[
          new AppBarMenuItem("Edit profile", () => Navigator.pushNamed(context, Routes.editProfile)).build(context),
          new AppBarMenuItem("Option 1", () => {}).build(context),
          new AppBarMenuItem("Option 2", () => {}).build(context),
          new AppBarMenuItem("Option 3", () => {}).build(context),
          new AppBarMenuItem("Option 4", () => {}).build(context),
        ];
      },
    ),
  ],

还有AppBarMenuItem

new PopupMenuItem(
  child: new InkWell(
    child: new Text(_label),
    onTap: _onTap,
)

如何确保选择一个项目后关闭弹出菜单?看来,如果我只是在PopupMenuItem中使用PopupMenuButton并导航至onSelected功能中的新屏幕,则菜单将正确关闭。但是当我使用onTap的{​​{1}}函数时,它不再关闭。

3 个答案:

答案 0 :(得分:3)

如文档中所述,当用户从弹出菜单项中选择一个选项时,弹出菜单应自动关闭。 使用InkWell onTap不会自动关闭弹出菜单,而是当从popupMenuList中选择一个项目时直接使用弹出菜单项自动关闭弹出菜单。 确保value的{​​{1}}属性不为null,否则选择PopupMenuItem时将不会调用onSelected函数

答案 1 :(得分:3)

只需在pop函数onTap中使用Navigator.pop(context, "$popupValue");

PopupMenuItem<String>(
    value: "Replay Game",
    child: ListTile(
        leading: Icon(Icons.replay,
            color: theme.actionButtonColor),
        title: Text("Replay Game"),
        onTap: () {
            Navigator.pop(context, "Replay Game");
            showDialog(
                context: context,
                builder: (context) {
                    return AlertDialog(
                        content: Text("Clear input and replay game?"),
                        actions: <Widget>[
                            FlatButton(
                                onPressed: () => Navigator.pop(context),
                                child: Text("No"),
                                textColor: theme.alterDialogActionColor,
                            ),
                            FlatButton(
                                onPressed: () {
                                    store.dispatch(ReplayAction(timerBloc, varBloc.fireAnalytics));
                                    Navigator.pop(context);
                                },
                                child: Text("Yes"),
                                textColor: theme.alterDialogActionColor,
                            ),
                        ],
                    );
                });
        },
    ),
)

答案 2 :(得分:1)

我遇到了同样的问题,这是我的解决方案。您的PopUpMenuButton()没有使用onSelected属性。 onSelected属性将正确关闭您的PopUpMenuButton。当前不是因为您的onTap的{​​{1}}属性接替了这项工作。
另外,我创建了一个AppBarMenuItem而不是PopUpMenuItem的列表,不确定是否会有所作为。但是,对于我的每个PopUpMenuEntry,我还为每个属性分配了value属性,以便PopUpMenuItem可以与onSelected交流被窃听的项目。

类似这样的东西:

PopUpMenuButton()

案例1,案例2等是指我分配给PopupMenuButton( onSelected: (selection) { switch (selection) { case 1: ... do stuff... break; case 2: ... break stuff... ); break; } }, 的value属性。