我有一个简单的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: ...
);
Run Code Online (Sandbox Code Playgroud)
更新 - 我意识到我最初的问题可能不太清楚,所以我在下面重新表述:
我想实现的是PopupMenuButton根据应用程序条件禁用。使用上面的代码,我可以启用/禁用onSelected方法调用,但是图标外观不会改变。
总结一下 - 我希望整个及其图标以与您传递给其方法PopupMenuButton相同的方式被禁用。这样,用户甚至无法按下按钮并调用菜单。IconButtonnullonPressed
这可以实现吗?
您可以使用小部件enabled的属性PopupMenuItem。
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),
],
Run Code Online (Sandbox Code Playgroud)
更多信息:https://docs.flutter.io/flutter/material/PopupMenuItem/enabled.html
更新
根据您向我们提供的有关问题的新信息,不可能使用按钮禁用该按钮PopupMenuButton,但这是 Flutter,因此您可以创建自己的 Widget。
我创建了一个自定义,PopupMenuButton您可以在其中使用该enabled属性,请看一下:
https://gist.github.com/diegovoper/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),
],
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8405 次 |
| 最近记录: |