Flutter解析值为整数时出错:左侧操作数不可空提示
问题描述
原本代码:
int? _trades = data['trades'] ?? 0;
为将data['trades']解析为整数,修改为:
int? _trades = int.parse(data['trades']) ?? 0;
出现错误提示:
The left operand can't be null, so the right operand is never executed. Try removing the operator and the right operand.
翻译为中文:
左操作数不可能为null,因此右操作数永远不会被执行。尝试移除该运算符和右操作数。
错误原因
int.parse()方法解析成功时返回非null整数,解析失败会直接抛出FormatException,而非返回null。因此?? 0的兜底逻辑永远不会触发,编译器提示该代码冗余。
解决方法
根据data['trades']的实际场景选择对应方案:
情况1:data['trades']可能为null,且可能不是合法数字字符串
先处理null场景,再用int.tryParse()(解析失败返回null)配合?? 0兜底:
int _trades = int.tryParse(data['trades']?.toString() ?? '') ?? 0;
data['trades']?.toString():若data['trades']为null则返回null,否则转为字符串?? '':将null转为空字符串,避免int.tryParse()接收null参数int.tryParse(...) ?? 0:解析成功返回整数,失败则返回0
情况2:data['trades']不为null,但可能不是合法数字字符串
直接用int.tryParse()替代int.parse(),配合兜底逻辑:
int _trades = int.tryParse(data['trades'].toString()) ?? 0;
情况3:data['trades']确定是合法数字字符串且不为null
直接移除冗余的?? 0,按需选择是否保留可空类型:
// 不需要可空类型 int _trades = int.parse(data['trades'].toString()); // 保留可空类型(无实际必要,因为parse成功必返回非null) int? _trades = int.parse(data['trades'].toString());
内容的提问来源于stack exchange,提问作者Bilal Sloni
相关产品推荐
相关产品推荐

