Flutter运行时报type 'Null'不是List<bool>子类型错误如何解决?
问题解决方案
问题根源
你的报错来自late List<bool> isSelected的初始化顺序不符合Flutter State生命周期要求:你在initState中先给isSelected赋值,再调用super.initState(),新版Dart的late变量校验规则会判定该变量在State初始化完成前被访问,返回null触发类型不匹配错误。
解决方案(二选一即可,优先推荐第二种)
方案1:调整initState执行顺序
将super.initState()放在initState的第一行,修正后代码:
@override void initState() { super.initState(); isSelected = [isMetric, isImperial]; }
方案2:直接初始化变量,避免使用late
late变量本身就有访问风险,你可以直接在定义isSelected时就赋初始值,完全去掉initState中的赋值逻辑,代码更简洁稳定:
- 将原
late List<bool> isSelected;替换为:
List<bool> isSelected = [true, false];
- 删除initState中
isSelected = [isMetric, isImperial];这行代码即可。
可空类型报错说明
ToggleButtons组件的isSelected参数要求传入不可空的List<bool>类型,你将变量改为可空的List<bool>?后,自然无法直接传入,除非你使用非空断言isSelected!强制转换,但这种方式存在空异常风险,不推荐使用。
内容的提问来源于stack exchange,提问作者agoidin
相关产品推荐
相关产品推荐

