Flutter报错bool?类型不能赋值给bool类型的代码问题求解
问题解决方法
报错原因
这个报错是Dart空安全规则导致的,分为两类错误:
- 从Map中通过key取值时,Dart无法确认对应key一定存在有效值,返回的是可空类型
bool?,不能直接赋值给非空的bool类型变量 SwitchListTile的onChanged回调要求接收带bool?参数的函数,你定义的Function类型不匹配
修改后的完整代码
class _FiltersScreenState extends State<FiltersScreen> { var _glutenFree = false; var _vegetarian = false; var _vegan = false; var _lactoseFree = false; @override initState() { // 新增?? false,取值为null时默认用false,把bool?转为bool类型 _glutenFree = widget.currentFilters['gluten'] ?? false; _lactoseFree = widget.currentFilters['lactose'] ?? false; _vegetarian = widget.currentFilters['vegetarian'] ?? false; _vegan = widget.currentFilters['vegan'] ?? false; super.initState(); } Widget _buildSwitchListTile( String title, String description, bool currentValue, // 修改updateValue的类型,匹配onChanged的参数要求 void Function(bool?) updateValue, ) { return SwitchListTile( title: Text(title), value: currentValue, subtitle: Text( description, ), onChanged: updateValue, ); } }
修改点说明
- 所有从
currentFiltersMap取值的位置,都加了??空判断操作符:如果取到的值是null,就用后面的默认值false,自动把可空的bool?转为非空的bool类型,匹配变量定义的类型要求 - 把
_buildSwitchListTile方法的updateValue参数类型从无约束的Function改为void Function(bool?),和SwitchListTile的onChanged回调要求的参数类型完全匹配,消除类型不兼容报错
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

