IF/ELSE结合int.parse处理null值时失效问题求助
问题分析与解决
核心问题根源
你遇到的问题有两个关键原因:
- if/else分支逻辑完全错误:就算进入if分支,你写的
int.parse(twoMark == null ? twoMark : '0')也会直接报错——因为twoMark是null时,你把null传给了int.parse,根本达不到转0的目的。 - 混淆了null和空字符串:控制台打印else分支日志,说明
twoMark == null判断为false,大概率是fgm不是null,而是空字符串""。空字符串不等于null,所以会进入else分支,执行int.parse时触发格式错误。
错误代码拆解
看你写的if/else逻辑:
if(twoMark == null){ print("FGM EST NULLE"); // 逻辑错误:twoMark是null时,依然传null给int.parse,直接报错 twoMark = int.parse(twoMark == null ? twoMark : '0'); }else{ print(" FGM N'EST PAS NULLE"); // 进入else说明twoMark不是null,??= '0'完全多余;如果是 empty string,int.parse照样报错 twoMark = int.parse(twoMark ??= '0'); }
正确解决方案
不需要复杂的if/else,直接合并处理null、空字符串、纯空格字符串三种场景:
方案1:极简安全处理(推荐)
用int.tryParse替代int.parse,即使输入不是有效数字也不会崩溃:
var twoMark = fgm; // 先trim去掉前后空格,空/ null则用'0',再尝试转int,失败则返回0 final intTwooMark = int.tryParse(twoMark?.trim() ?? '0') ?? 0;
方案2:明确分支处理
如果需要更清晰的逻辑分支:
var twoMark = fgm; String parseStr; // 判断是否为null、空字符串、纯空格 if (twoMark == null || twoMark.trim().isEmpty) { parseStr = '0'; } else { parseStr = twoMark.trim(); } final intTwooMark = int.parse(parseStr);
替换你完整代码的对应部分
把你原代码里的:
var twoMark = fgm; twoMark ??= '0'; final intTwooMark = int.parse(twoMark);
直接替换成上面的方案1代码即可。
内容的提问来源于stack exchange,提问作者zsupraz
相关产品推荐
相关产品推荐

