如何修复Flutter布尔表达式报错type 'Null' is not a 'bool'
问题原因
- 键名大小写不匹配:你在
setState中更新data字典时,昼夜状态的键名为isDaytime(末尾t小写),但三元运算符中取值使用的键名是isDayTime(末尾T大写),二者名称不匹配导致取值永远为null:- 写
(data['isDayTime']==null)? 'day.png' : 'night.png'时会永远命中判空成立的分支,返回day.png - 直接写
data['isDayTime']? 'day.png' : 'night.png'时,Dart要求布尔表达式必须为非空bool类型,null不符合规则因此抛出类型错误
- 写
- Dart空安全规则限制:布尔判断位置不允许出现
Null类型的值,必须明确为true/false
修复方案
首先统一键名,然后用空判断操作符??给可能为空的字段设置默认布尔值,示例代码如下:
// 键名和setState中保存的isDaytime保持一致,null时默认按夜间处理,可自行调整默认值 String bgImage = (data['isDaytime'] ?? false) ? 'day.png' : 'night.png';
如果需要值为null时默认显示白天,将默认值改为true即可:
String bgImage = (data['isDaytime'] ?? true) ? 'day.png' : 'night.png';
内容的提问来源于stack exchange,提问作者soma
相关产品推荐
相关产品推荐

