DropdownButton error: The argument type 'void Function(String)' can't be assigned to the parameter type 'void Function(String?)?'

DropdownButton error: The argument type 'void Function(String)' can't be assigned to the parameter type 'void Function(String?)?'

迁移到空安全后,我开始在 DropdownButton 中看到此错误。

DropdownButton<String>(
  value: myValue,
  onChanged: (String string) { // Error
    print(string);
  },
  items: [
    DropdownMenuItem(
      value: 'foo',
      child: Text('Foo'),
    ),
    DropdownMenuItem(
      value: 'bar',
      child: Text('Bar'),
    ),
  ],
)

错误:

The argument type 'void Function(String)' can't be assigned to the parameter type 'void Function(String?)?'.

检查 value 属性 的实现,它可以为空。

final T? value;

这意味着您可以向 value 提供 String?,如果您提供 String? 应该 onChanged 而不是 return String?.

回答你的问题:

onChanged 方法的类型从 String 更改为 String?,如下所示:

onChanged: (String? string) { 
  print(string);
}

或者,只需省略类型 String? 让 Dart 为您推断。

onChanged: (string) { 
  print(string);
}