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

Flutter/Dart报错:运算符无法无条件调用因接收方可能为null如何解决

错误原因

Dart 空安全机制下,SharedPreferences.getStringList() 方法的返回值为可空的 List<String>? 类型:如果本地存储中不存在对应的userCart键,返回结果为null。
你使用?.安全调用获取length属性后,得到的是可空的int?类型,Dart 不允许对可能为null的变量直接执行算术运算符,因此触发了该报错。

解决方案

推荐使用空合并运算符??为null的情况设置兜底默认值,确保参与运算的值一定是非空的int类型:

class CartItemCounter extends ChangeNotifier {
  final int _counter = (EcommerceApp.sharedPreferences
      .getStringList(EcommerceApp.userCartList)
      ?.length ?? 1) - 1;

  int get count => _counter;
}

代码说明:

  • 外层添加括号优先处理空判断逻辑
  • ?? 1表示如果前面获取到的length为null,就用默认值1参与后续运算,空购物车场景下计算结果就是0,符合常规业务逻辑
  • 你也可以根据自己的业务规则调整??后面的默认值

如果你的业务逻辑能100%保证getStringList的返回值永远不为空,也可以用!强制声明非空,但不推荐新手使用,空值场景下会直接触发运行时崩溃:

final int _counter = EcommerceApp.sharedPreferences
    .getStringList(EcommerceApp.userCartList)!
    .length - 1;
额外注意

你当前把CartItemCounter类写在了EcommerceApp类的内部,Dart 不支持类嵌套定义的写法,请把CartItemCounter移到EcommerceApp类的外部,避免出现额外的语法错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:36:03