我有显示要选择的项目列表的代码。它可以正确地让我输入并搜索项目。但是,一旦我选择了该项目,有没有办法可以将其清除,就好像它从未被选择过一样,或者取消选择它。
我可以清空用于输入菜单项的文本框。然后它显示好像该项目从未被选择,但我的代码从未收到选择通知,所以我仍然认为原始项目已被选择。所以下次我绘制屏幕时,该项目会回来。
我就是这样做的
// pulldown of all crew members that can be selected
class SelectCrewMember extends StatefulWidget {
final int index;
const SelectCrewMember(this.index, {super.key});
@override
State<SelectCrewMember> createState() => _SelectCrewMemberState();
}
class _SelectCrewMemberState extends State<SelectCrewMember> {
CrewMember? dropdownValue;
@override
Widget build(BuildContext context) {
final position = CheckinData().getPositionToFill(widget.index);
return Padding(
padding: const EdgeInsets.fromLTRB(20, 8, 20, 8),
child: DropdownMenu<CrewMember>(
enableFilter: true,
menuHeight: 300,
width: 300,
initialSelection: position.member,
label: Text(position.position.name),
onSelected: (CrewMember? value) {
setState(() {
dropdownValue = value!;
CheckinData().updateCrew(value, widget.index);
});
},
dropdownMenuEntries: CheckinData()
.getCrewToPickFrom(widget.index)
.map<DropdownMenuEntry<CrewMember>>((CrewMember value) {
return DropdownMenuEntry<CrewMember>(
value: value,
label: value.name,
);
}).toList(),
),
);
}
}
这就是我的做法,因为我认为没有内置的方法可以做到这一点。我将此属性添加到 DropdownMenu 小部件中:
trailingIcon: IconButton(
icon: Icon(Icons.clear),
onPressed: () => CheckinData().updateCrew(null, widget.index),
),