我有一个 DropdownButtonFormField 并希望使用从另一个元素执行的
setState
更改所选值。这是我的下拉字段:
selectedNumber = "5";
DropdownButtonFormField<String>(
hint: Text(selectedNumber != "Select"
? selectedNumber
: "Select",
),
//value: "",
items: _durationList.map((value) {
return new DropdownMenuItem<String>(
value: value,
child: new Text(value),
);
}).toList(),
onChanged: (value) {
setState(() {
selectedNumber = value!;
_selectedNumberController.text = value;
});
},
),
这是我的另一个带有
setState
的元素,据说应该更改 DropdownButtonFormField 中的值:
setState(() {
selectedNumber = "Select";
_selectedNumberController.text = "";
});
但是,此
setState
仅在未从下拉列表中选择任何项目时才起作用,即在构建方法之后,默认 selectedNumber
为 5。
触发后,setState
会更新 selectedNumber
,并且下拉列表中的值将更改为 Select
。
但是,如果我在构建方法之后从下拉列表中选择一个值,即将值从 5 更改为 10,则
setState
不会更改下拉字段值。
有什么建议如何实现这一点吗?
在此代码中,您有两个可以修改 selectedNumber 值的小部件。
DropdownButtonFormField<String>(
hint: Text(selectedNumber ?? 'Select'),
value: selectedNumber,
items: _durationList.map((value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (value) {
setState(() {
selectedNumber = value;
});
},
),
IconButton(
color: Colors.white,
onPressed: () => setState(() {
selectedNumber = null;
}),
icon: Icon(Icons.abc),
),
在您的主小部件类中,您应该定义 selectedNumber 的默认值,例如,该值应该为 null 或 _durationList 列表中的一个元素
late String? selectedNumber = null;