Flutter 两个DropdownButton联动切换父选项出现值匹配报错如何解决
报错根本原因
- Flutter
DropdownButton组件存在强制校验规则:绑定的value属性必须为null,或者恰好是items列表中某一个选项的value,否则就会抛出你遇到的断言错误。 - 触发报错的逻辑:当你先选中第二个下拉框的某个班级值后,
_selectedClassroom会存储该旧值;此时切换第一个下拉框的学习阶段,第二个下拉框的items会更新为新学习阶段对应的班级列表,旧的_selectedClassroom大概率不在新列表中,就会触发校验失败报错。
解决方案
只需要在第一个下拉框的选中值变更回调中,同步清空已选中的班级值即可,修改后的第一个 DropdownButton 的 onChanged 代码如下:
onChanged: (StudyCycle? studyCycle) { if (studyCycle != _selectedStudyCycle) { setState(() { // 切换学习阶段时清空已选班级,避免旧值与新选项列表冲突 _selectedClassroom = null; _selectedStudyCycle = studyCycle; }); } },
注:你原来代码里分两次调用setState先置空再赋值的逻辑可以简化成上面的单次调用,功能完全一致,性能更优。
内容的提问来源于stack exchange,提问作者Steeven Delucis
相关产品推荐
相关产品推荐

