意外的DropdownButtonFormField行为

时间:2020-05-13 17:59:32

标签: flutter dart

将Flutter更新为1.17.0之后,我注意到DropdownButtonFormField的行为异常。

当我选择不允许选择的项目时,它仍会在DropdownButtonFormField中进行更新。

我创建了gist in dartpad,再现了问题。

1 个答案:

答案 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来更改此