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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:03:41