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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:54:24