我想控制一个下拉按钮并使用按钮使其无法点击。
有没有办法让它禁用。基本上不允许它改变。
new DropdownButton(
value: animalName,
items: animals.map(
(String value) {
return new DropdownMenuItem<String>(
value: value,
child: new Text('$value'),
);
},
).toList(),
onChanged: (value) {
setState(() {
animalName = value;
});
},
),
所以这是我目前在下拉按钮上使用的代码,但我无法禁用它。
答案 0 :(得分:7)
在DropdownButton文档中找到了此内容
如果items或onChanged为null,则该按钮将被禁用,向下箭头将变灰,并且将显示DisabledHint(如果提供)
答案 1 :(得分:7)
如果将DropdownButtonFormField
设置为null,则可以禁用DropdownButton
或onChanged
,并且如果希望该下拉列表仍显示所选值,则必须设置disabledHint
。例如:
DropdownButtonFormField<String>(
disabledHint: Text(_selectedItem),
value: _selectedItem,
onChanged: enabled ? (value) => setState(() => _selectedItem = value) : null,
items: items.map<DropdownMenuItem<String>>((item) {
return DropdownMenuItem(
value: item,
child: Text(item),
);
}).toList(),
)
答案 2 :(得分:4)
您可以使用 IgnorePointer 小部件将其包装,以使 DropdownButton 禁用
IgnorePointer(
ignoring: enabled,
child: new DropdownButton(
value: animalName,
items: animals.map(
(String value) {
return new DropdownMenuItem<String>(
value: value,
child: new Text('$value'),
);
},
).toList(),
onChanged: (value) {
setState(() {
animalName = value;
});
},
),
);
答案 3 :(得分:2)
这不是你想听到的,但我认为目前这不是一个简单的方法。我尝试简单地删除所有项目,这会导致一个不错的小崩溃。也许值得在github上向人们提出问题......
现在有一种替代方案可能对您有好处。如果将DropdownButton包装在IgnorePointer中,当您希望将其禁用时,可以将IgnorePointer的ignoring
属性更改为true。
这样,如果用户点击它,它就不会做任何事情。
但是您可能想以某种方式向用户表明它已被禁用,例如设置提示文字(因为它是灰色的)。
child: new IgnorePointer(
ignoring: true,
child: new DropdownButton(
hint: new Text("disabled"),
items: ["asdf", "wehee", "asdf2", "qwer"].map(
(String value) {
return new DropdownMenuItem<String>(
value: value,
child: new Text('$value'),
);
},
).toList(),
onChanged: (value) {},
),
答案 4 :(得分:1)
好的,我发现了一个让我满意的窍门 我希望它根据DropdownButton
隐藏/显示CheckboxListTile 在StatefulWidget类中的首先创建一个函数ex:
_buildDropDown(bool enable) {
if (enable) {
return DropdownButton<String>(
hint: Text("Hint"),
items: <String>[
'item 1',
'item 2',
'item 3',
].map((String value) {
return new DropdownMenuItem<String>(
value: value,
child: new Text(value),
);
}).toList(),
onChanged: (value) {},
);
} else { // Just Divider with zero Height xD
return Divider(color: Colors.white, height: 0.0);
}
}
现在正在构建
bool enable = true;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
CheckboxListTile(
title: const Text('Switcher'),
selected: true,
value: enable,
onChanged: (bool value) {
setState(() {
enable = value;
});
},
),
_buildDropDown(enable),
],
);
}
现在每次更改启用都会显示和隐藏DropdownButton
答案 5 :(得分:1)
如果items或onChanged为null,则该按钮将被禁用,向下 箭头将显示为灰色,并显示disabledHint(如果 提供)
所以这样的事情应该起作用:
DropdownButton<String>(
...
onChanged: this.enabled ? (id) => setState(() => this.id = id) : null,
)
答案 6 :(得分:1)
DropdownButtonFormField(
onChange: isDisable ? null : (str){
},
disabledHint: isDisable ? null : Text('Your hint text'),
...
)
禁用 onChange:空
用于禁用字幕 d isabledHint:文本(“您的提示文本”)