将 '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?,但 genderString。是将 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!;