Flutter空安全下可空int变量执行自增操作报错问题咨询
报错原因
- 根因是Dart空安全机制对可空类型的操作限制:你定义的
int? i属于可空整型,声明时未赋值,默认值为null。 - 第一个报错:
i++本质是执行i = i + 1,空安全规则禁止对可能为null的变量直接调用算术操作符,所以触发「操作符+不能在可能为空的int?类型上调用」的错误。 - 第二个报错是第一个错误的衍生:编译器无法完成合法的算术运算推导,错误识别运算后的返回值为
num类型,和int?的变量类型不匹配,因此抛出赋值类型不匹配的错误。
解决方案
根据业务场景可以选择以下任意一种方案:
- 【最推荐】直接使用非空类型并初始化:计数器本身不需要为可空类型,将变量声明改为
int i = 0;即可,完全符合空安全规则,也不会产生额外的运行时风险。 - 【必须保留可空类型时可选】确保运行到运算逻辑时
i已被赋值不为空,使用空断言操作符!告知编译器此处i一定非空,代码改为i!++;。注意:如果运行时i仍为null会直接抛出空异常,需自行保证非空逻辑。 - 【兼容i可能为空的场景】使用空合并运算符设置默认值,将运算逻辑改为
i = (i ?? 0) + 1;,如果i为null就默认取0做累加,无需提前保证非空。
内容的提问来源于stack exchange,提问作者Logic
相关产品推荐
相关产品推荐

