我有一个简单的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] 删除。
我来说两句