gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:50:54 27 4
gpt4 key购买 nike

我在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com