将Flutter更新为1.17.0之后,我注意到DropdownButtonFormField
的行为异常。
当我选择不允许选择的项目时,它仍会在DropdownButtonFormField
中进行更新。
我创建了gist in dartpad,再现了问题。
答案 0 :(得分:0)
查看source code of DropdownButtonFormField,我发现value
属性从FormField
传递到超级构造函数中,在这里它被用作initialValue
。 (在1444行附近)
实际上,这很令人困惑。
FormField
管理自己的状态。解决方法是给它一个密钥,并在更改值后要求其重置状态,因此再次使用初始值:
final key = GlobalKey<FormFieldState>();
@override
Widget build(BuildContext context) {
return DropdownButtonFormField(
key: key,
value: _value,
onChanged: (newValue) {
// Allows only to select second value
if (newValue == 'second') {
setState(() => _value = newValue);
} else {
print('Cannot set other values than second');
// Explicidly sets value as second <- this gets ignored
setState(() {
_value = 'second';
key.currentState.reset();
});
}
},
...
但是我看到有人刚刚添加了a pull request来更改此