首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Flutter PopupMenuButton -如何有条件地禁用它

Flutter PopupMenuButton -如何有条件地禁用它
EN

Stack Overflow用户
提问于 2019-04-20 02:47:29
回答 1查看 3.7K关注 0票数 1

我在appTitle上有一个简单的PopupMenuButton实现。这就是它:

PopupMenuItem<int> _buildMenuItem(int size) {
  return PopupMenuItem<int>(
    value: size,
    child: Text('${size}x$size'),
  );
}

return Scaffold(
  appBar: AppBar(
    title: Text('Some title'),
    actions: <Widget>[
      PopupMenuButton<int>(
        icon: Icon(Icons.refresh),
        onSelected: _canReplay()
            ? (int size) {
                // do something with the size
              }
            : null,
        itemBuilder: (BuildContext context) => <PopupMenuItem<int>>[
              _buildMenuItem(3),
              _buildMenuItem(4),
              _buildMenuItem(5),
            ],
      ),
    ],
  ),
  body: ...
);

更新-我已经意识到我最初的问题可能不是很清楚,所以我将其重新表述如下:

我想要实现的是禁用基于应用程序条件的PopupMenuButton。使用上面的代码,我可以启用/禁用onSelected方法调用,但是,图标外观不会改变。

总而言之,我希望整个PopupMenuButton及其图标以同样的方式被禁用,就像您将null传递给它的onPressed方法时禁用IconButton一样。这样,用户甚至不能按下按钮和调用菜单。

这是可以实现的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-20 19:21:44

几个小时后,我最终得到了一个符合我的需求的解决方案,它是在没有任何复杂的自定义部件的情况下实现的。这就是它:

return Scaffold(
  appBar: AppBar(
    title: Text(allTranslations.text('Some title')),
    actions: <Widget>[
      _canReplay()
          ? PopupMenuButton<int>(
              icon: Icon(Icons.refresh),
              onSelected: (int size) {
                // do something with size
              },
              itemBuilder: (BuildContext context) => <PopupMenuItem<int>>[
                    _buildMenuItem(3),
                    _buildMenuItem(4),
                    _buildMenuItem(5),
                  ],
            )
          : IconButton(
              icon: Icon(Icons.refresh),
        onPressed: null,
            ),
    ],
  ),
  body: ...
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55766415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档