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

安赫尔·托多罗夫

我有一个简单的PopupMenuButton实现appTitle这里是:

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及其图标都以相同的方式IconButton被禁用,并在您传递null给它的onPressed方法时被禁用这样,用户甚至无法按下按钮并调用菜单。

这是可以实现的吗?

安赫尔·托多罗夫

几个小时后,我得到了以下解决方案,它符合我的要求,并且无需任何复杂的自定义小部件即可实现。这里是:

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: ...
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Flutter PopupMenuButton删除填充

如何在Flutter中制作可重用的PopupMenuButton

Flutter PopupMenuButton缺少波纹效果

Flutter:如何有条件地添加小部件

如何打开PopupMenuButton?

Flutter:使用带有 PopupMenuButton 的选择功能导航到另一个页面

Flutter-在BottomNavigationBar中显示PopupMenuButton

如何从代码显示PopupMenuButton的菜单

Flutter:有条件地在列表中嵌套 Map

Flutter ListTile (tileColor) 有条件地

Flutter:有条件地显示BottomNavigationBar

Flutter:如何在调用构造函数后有条件地在 ChangeNotifier 内运行方法

Flutter:根据登录状态切换 PopupMenuButton

Flutter:在单元测试中获取PopupMenuButton的PopupMenuItem文本

Flutter 使用文本和图标而不是单个图标创建 PopupMenuButton

Flutter PopupMenuButton自定义菜单中的3个点

在Flutter中有条件地显示/隐藏图块中的复选框

showDialog 錯誤:Flutter 中的 PopupMenuButton 不會觸發對話框

Flutter Override PopupMenuButton Widget可防止软键盘关闭

如何使按钮有条件地隐藏或禁用?

如何有条件地禁用routerLink属性?

审查如何有条件地禁用提交按钮

Flutter:如果在InputDecoration的errorText属性中有条件,该如何使用?

带有条件的 Flutter 显示弹出窗口

有条件的颜色变化 Dart Flutter

如何有条件地渲染

PopupMenuButton菜单始终在屏幕侧面有一个缝隙

Flutter有条件地渲染2个表单-将表单值复制到另一个表单

Flutter:有条件的底部导航栏,用于根据if条件显示页面