我在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
一样。这样,用户甚至不能按下按钮和调用菜单。
这是可以实现的吗?
发布于 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: ...
);
https://stackoverflow.com/questions/55766415
复制相似问题