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

