作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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
及其图标以同样的方式被禁用 IconButton
被禁用,你传递 null
到它的 onPressed
方法。这样,用户甚至无法按下按钮和调用菜单。
这是可以实现的吗?
最佳答案
您可以使用 PopupMenuItem
小部件的 enabled
属性。
PopupMenuItem<int> _buildMenuItem(int size, bool enabled) {
return PopupMenuItem<int>(
value: size,
child: Text('${size}x$size'),
enabled: enabled,
);
}
itemBuilder: (BuildContext context) => <PopupMenuItem<int>>[
_buildMenuItem(3, true),
_buildMenuItem(4, false),
_buildMenuItem(5, true),
],
更多信息:https://docs.flutter.io/flutter/material/PopupMenuItem/enabled.html
更新
根据您向我们提供的有关问题的新信息,无法使用 PopupMenuButton
按钮禁用该按钮,但这是 Flutter,因此您可以创建自己的 Widget。
我创建了一个自定义 PopupMenuButton
,您可以在其中使用 enabled
属性,看一下:
https://gist.github.com/diegoveloper/a388dd42a01ffff04cd51ec026381fe3
用法:
MyOwnPopupMenuButton<int>(
enabled: _canReplay(),
icon: Icon(
Icons.refresh,
color: _canReplay() ? Colors.black : Colors.black.withOpacity(0.4),
),
onSelected: _canReplay()
? (int size) {
// do something with the size
}
: null,
itemBuilder: (BuildContext context) => <PopupMenuItem<int>>[
_buildMenuItem(3),
_buildMenuItem(4),
_buildMenuItem(5),
],
)
关于Flutter PopupMenuButton - 如何有条件地禁用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55766415/
我是一名优秀的程序员,十分优秀!