You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中向List<bool?>赋值null时出现类型不匹配错误求助

问题分析与解决

你遇到的问题核心是变量声明的类型和实际赋值的列表类型不匹配:

虽然你把isClosed声明为List<bool?>(可空布尔列表),但在initState中通过map生成的列表,实际运行时类型是List<bool>(不可空布尔列表)。因为map里的返回值是e.devices.firstWhere(...).state == 'close',这个比较表达式的结果是明确的bool类型,Dart的类型推断会自动将map的结果推断为Iterable<bool>,调用toList()后得到的就是List<bool>。

当你后续尝试给isClosed[index]赋值null时,由于实际列表是List<bool>,不允许存储null,就会抛出type 'Null' is not a subtype of type 'bool'的错误。

解决办法

只需要在map方法中显式指定泛型类型为bool?,让Dart生成Iterable<bool?>,这样toList()得到的就是真正的List<bool?>,就能正常存储null了:

late List<bool?> isClosed;
...
void initState() {
    super.initState();

    // 显式指定map的泛型为bool?
    isClosed = widget.gateway.nodes.map<bool?>((e) {
      return e.devices.firstWhere((element) {
            return element.type == 'lock';
          }).state ==
          'close';
    }).toList();
}

修改后,isClosed的实际类型就是List<bool?>,执行isClosed[index] = null;就不会再触发类型错误,加载状态的逻辑就能正常工作。

内容的提问来源于stack exchange,提问作者un_cafeinoman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:17:14