我正在从 API 动态更新下拉表。当我选择一个小时时,会从 API 中检索相应的主题。
假设我在几个小时之间切换。
第 5 小时有科目 A 和 B,而第 4 小时只有科目 B。
最初选择第 5 小时时,选择 A 作为所选主题。
当我选择第 4 小时时,新列表是从 API 获得的,但我得到“项目不在 dropdownbuttonitemlist 错误中”。
我知道这是因为 DropDownMenuField 的 value 属性,这就是为什么我在从 API 成功检索信息时将值设置为 null 的原因。
片段如下:
下拉按钮:
DropdownButtonFormField<String>(
isExpanded: true,
style: new TextStyle(
fontFamily: "Poppins",
fontWeight: FontWeight.w400,
color: Colors.black,
),
decoration: InputDecoration(
contentPadding: const EdgeInsets.all(0),
labelText: "Select subject",
labelStyle: TextStyle(
fontFamily: "Poppins",
fontWeight: FontWeight.w200,
color: Colors.black,
),
),
value: subjectController,
onChanged: (value) {
setState(() {
pk_table =
pk_table_array[subject_array.indexOf(value)];
required_timestamp = required_timestamp_array[
subject_array.indexOf(value)];
subjectController = value;
buttonActive = true;
});
},
items: _subjectDropDownItems,
),
setState 方法(在 API 成功获取时调用):
setState(() {
subjectController = null;
buttonActive = true;
subject_array.forEach((subject) {
if (subjectController == null) {
print("updated value");
subjectController = subject;
}
_subjectDropDownItems.add(new DropdownMenuItem(
child: new Text(subject.toString()),
value: subject.toString(),
));
});
});
subjectController 被定义为 State 类的一个属性。
这是错误:
There should be exactly one item with [DropdownButton]'s value: IT8551B - Web Technology Laboratory B.
Either zero or 2 or more [DropdownMenuItem]s were detected with the same value
提前谢谢你的帮助!