Flutter项目DropdownButtonFormField出现类型不匹配与空操作符报错如何解决
修复方案
报错1:Object?类型值无法赋值给String类型变量
这个问题出现在onChanged回调的赋值逻辑,因为DropdownButtonFormField默认没有指定泛型,回调返回的val默认是Object?类型,和你用来接收的_currentSugars的String类型不匹配。
修复时首先给DropdownButtonFormField和对应的DropdownMenuItem加上String泛型约束,明确值的类型,同时对可空的回调值做兼容处理即可。
报错2:左操作数不可为空,??右侧逻辑永远不会执行
这个问题是因为你定义_currentSugars时用了非空String类型(未加?后缀),所以??左边的变量不可能为空,右侧的userData.sugars完全不会生效。
你可以根据业务需求选一种修复方式:
- 如果不需要备用默认值,直接删掉
?? userData.sugars即可 - 如果确实需要在
_currentSugars为空时用userData.sugars兜底,把_currentSugars的类型改为String?即可
完整修复后代码示例
DropdownButtonFormField<String>( // 如果你修改了_currentSugars为可空类型,这行逻辑保留即可;如果没改直接写value: _currentSugars value: _currentSugars ?? userData.sugars, decoration: textInputDecoration, items: sugars.map((sugar) { return DropdownMenuItem<String>( value: sugar, child: Text('$sugar sugars'), ); }).toList(), // 确认选择逻辑不会返回null的话可以直接用!强转,也可以用val ?? _currentSugars做空兼容 onChanged: (val) => setState(() => _currentSugars = val!), ),
内容的提问来源于stack exchange,提问作者Mike Osborn
相关产品推荐
相关产品推荐

