将 'String?' 从 DropdownFormField 更改为 'String'
Change 'String?' from DropdownFormField to 'String'
在我的代码中,我有这个 DropdownFormField
这样用户就可以 select 他们的性别:
DropdownButtonFormField<String>(
decoration: InputDecoration(labelText: 'Select gender'),
validator: (val) => val!.isEmpty ? 'Fill the field' : null,
isExpanded: true,
value: _selectedValue,
items: items.map(buildMenuItem).toList(),
onChanged: (val) {
setState(() {
gender = val;
});
},
)
在 onChanged: (val)
中,val
应该是 String?
,但 gender
是 String
。是将 val as String
用作 gender = val as String
,显然它有效。但是,如果我在没有 select 选项的情况下按下保存按钮,我会得到一个错误:
Null check operator used on a null value
好像该项目没有通过 validator
可空值后的 !
运算符告诉 flutter 假定该值不为空,如果为空则抛出错误。
(val) => val!.isEmpty ? 'Fill the field' : null,
因此,当您使用空选项调用它时,它会抛出错误,因为此时 val 为 null。要解决此问题,只需将验证器更改为如下所示:
(val) => (val==null || val.isEmpty) ? 'Fill the field' : null,
此外,如果您的类型是 String?
,则无需说 val as String
,这就是 !
存在的原因,对于您所处的情况已经知道可空值不为空:
gender = val!;
在我的代码中,我有这个 DropdownFormField
这样用户就可以 select 他们的性别:
DropdownButtonFormField<String>(
decoration: InputDecoration(labelText: 'Select gender'),
validator: (val) => val!.isEmpty ? 'Fill the field' : null,
isExpanded: true,
value: _selectedValue,
items: items.map(buildMenuItem).toList(),
onChanged: (val) {
setState(() {
gender = val;
});
},
)
在 onChanged: (val)
中,val
应该是 String?
,但 gender
是 String
。是将 val as String
用作 gender = val as String
,显然它有效。但是,如果我在没有 select 选项的情况下按下保存按钮,我会得到一个错误:
Null check operator used on a null value
好像该项目没有通过 validator
可空值后的 !
运算符告诉 flutter 假定该值不为空,如果为空则抛出错误。
(val) => val!.isEmpty ? 'Fill the field' : null,
因此,当您使用空选项调用它时,它会抛出错误,因为此时 val 为 null。要解决此问题,只需将验证器更改为如下所示:
(val) => (val==null || val.isEmpty) ? 'Fill the field' : null,
此外,如果您的类型是 String?
,则无需说 val as String
,这就是 !
存在的原因,对于您所处的情况已经知道可空值不为空:
gender = val!;