Dart空安全报错:无法无条件访问可能为null的接收者属性如何解决
报错原因
Property can't be unconditionally accessed because the receiver can be null是Dart空安全机制的强制校验拦截:你定义的两个入参ToursRecord? tourRecord、int? venueCapacity都是可空类型,直接访问tourRecord.passengers属性、直接用>做大小比较时,Dart会阻止这类可能触发空指针的操作。之前嵌套if方案不生效,本质是判空逻辑没有完成类型提升——没有在运算分支里明确排除null的可能,Dart就不会把可空类型识别为非空类型,校验依然会触发。
修复实现
首先明确null场景下的业务返回规则(以下示例按通用逻辑处理:行程记录不存在、场地容量未配置时,默认判定为不超容,你可以根据实际业务调整null分支的返回值),修复后代码如下:
bool doesTourExceedsVenueCapacity( ToursRecord? tourRecord, int? venueCapacity, ) { // 优先处理所有空值场景,完成类型提升 if (tourRecord == null || venueCapacity == null) { return false; } // 此分支下两个参数已被Dart自动推断为非空类型,可直接做属性访问和比较运算 return tourRecord.passengers > venueCapacity; }
注意:原代码里比较结果 ? true : false属于冗余写法,比较运算的返回值本身就是bool类型,直接返回即可,不需要额外套三元表达式。
内容的提问来源于stack exchange,提问作者Roggie
相关产品推荐
相关产品推荐

