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
相关产品推荐
相关产品推荐

