Flutter 管制及;禁用颤振中的下拉按钮?
我想控制一个下拉按钮,并使用按钮使其不可点击 有没有办法让它禁用。基本上不允许它改变Flutter 管制及;禁用颤振中的下拉按钮?,flutter,Flutter,我想控制一个下拉按钮,并使用按钮使其不可点击 有没有办法让它禁用。基本上不允许它改变 new DropdownButton( value: animalName, items: animals.map( (String value) { return new DropdownMenuItem<String>( value: value,
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;
});
},
),
新建下拉按钮(
值:animalName,
物品:动物地图(
(字符串值){
返回新的DropdownMenuItem(
价值:价值,
子项:新文本(“$value”),
);
},
).toList(),
一旦更改:(值){
设置状态(){
动物名=值;
});
},
),
这是我目前在下拉按钮上使用的代码,但我无法禁用它。这不是你想听到的,但我认为目前没有简单的方法。我试着简单地删除所有的项目,这导致了一个很好的小崩溃。也许值得在github上向Flatter的人提出一个问题 现在有一个可能对你来说足够好的替代方案。如果将DropdownButton包装在IgnorePointer中,当您希望禁用它时,可以将IgnorePointer的
忽略
属性更改为true
这样,如果用户点击它,它不会做任何事情
但是您可能希望以某种方式向用户指示它也被禁用,比如设置提示文本(因为它是灰色的)
child:新的IgnorePointer(
是的,
孩子:新的下拉按钮(
提示:新文本(“已禁用”),
项目:[“asdf”、“wehee”、“asdf2”、“qwer”]地图(
(字符串值){
返回新的DropdownMenuItem(
价值:价值,
子项:新文本(“$value”),
);
},
).toList(),
一旦更改:(值){},
),
好吧,我找到了一个让我满意的窍门
我想让它根据具体情况隐藏/显示
课堂上
首先创建一个函数,例如:
_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);
}
}
\u构建下拉列表(bool启用){
如果(启用){
返回下拉按钮(
提示:文本(“提示”),
项目:[
“项目1”,
“项目2”,
“项目3”,
].map((字符串值){
返回新的DropdownMenuItem(
价值:价值,
子项:新文本(值),
);
}).toList(),
一旦更改:(值){},
);
}else{//仅为高度为零的除法器xD
返回分隔符(颜色:Colors.white,高度: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),
],
);
}
bool enable=true;
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
CheckboxListTile(
标题:常量文本(“切换器”),
选择:正确,
值:启用,
一旦更改:(布尔值){
设置状态(){
启用=值;
});
},
),
_构建下拉列表(启用),
],
);
}
现在,每次更改enable时,它都会显示和隐藏在DropdownButton文档中找到的: 如果items或onChanged为空,则按钮将被禁用,向下箭头将变灰,并且将显示disabledHint(如果提供) 如果items或onChanged为空,则按钮将被禁用,按钮将关闭 箭头将灰显,并且将显示disabledHint(禁用)(如果 (提供) 因此,类似这样的方法应该有效:
DropdownButton<String>(
...
onChanged: this.enabled ? (id) => setState(() => this.id = id) : null,
)
下拉按钮(
...
onChanged:this.enabled?(id)=>setState(()=>this.id=id):null,
)
如果将onChanged
设置为null,则可以禁用dropdownbutonformfield
或DropdownButton
,如果希望该下拉列表仍显示选定值,则必须设置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(),
)
DropdownButtonFormField(
disabledHint:文本(_selectedItem),
值:_selectedItem,
一旦更改:已启用?(值)=>setState(()=>\u selectedItem=value):空,
items:items.map((item){
返回下拉菜单项(
价值:项目,,
子项:文本(项),
);
}).toList(),
)
以下是简单的答案。
您可以使用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;
});
},
),
);
IgnorePointer(
忽略:已启用,
孩子:新的下拉按钮(
值:animalName,
物品:动物地图(
(字符串值){
返回新的DropdownMenuItem(
价值:价值,
子项:新文本(“$value”),
);
},
).toList(),
一旦更改:(值){
设置状态(){
动物名=值;
});
},
),
);
用于禁用
onChange:null
用于禁用标题
disabledHint:Text(“您的提示文本”)不更改其他小部件是什么意思?我让它更容易理解。只需返回一个空的
容器
,例如返回容器()
问题在于,如果禁用,则value属性不会反映并通过defaultdisable提示选择它。Disable提示应与not disabledHint:!isDisable?null:Text(“您的提示文本”)一起使用,
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;
});
},
),
);
DropdownButtonFormField(
onChange: isDisable ? null : (str){
},
disabledHint: isDisable ? null : Text('Your hint text'),
...
)