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

Flutter跳转第二屏触发FormatException异常导致页面无法加载如何解决

问题根因
  1. 第二页的TextEditingController初始化时默认text属性为空字符串,你在第二页的initState生命周期、build渲染方法中提前调用了计算逻辑,还未等用户输入内容就执行了double.parse解析空字符串,直接触发格式异常,导致页面无法完成加载。
  2. 代码存在容错缺失:原生double.parse方法只要遇到非数值格式内容(空字符串、字母、特殊符号)就会直接抛出异常,没有兼容非法输入的处理逻辑。
  3. 额外存在方法名不匹配问题:你定义的计算函数名为calcul,但按钮onPressed中调用的是calculCredit,若实际代码未做对应函数定义,也会触发逻辑异常。
修复方案
  • 调整计算逻辑触发时机:排查第二页的生命周期、build方法,移除页面加载阶段的计算逻辑调用,仅保留按钮点击事件中的计算触发。
  • 替换解析方法增加容错:用double.tryParse替代double.parse,解析失败时返回业务默认值,不会直接抛出崩溃:
// 明确参数类型为TextEditingController,避免dynamic类型带来的潜在问题
double calcul(TextEditingController salaire, TextEditingController valeurApport, TextEditingController moisRembours) {
  final salaireVal = double.tryParse(salaire.text) ?? 0.0;
  final valeurApportVal = double.tryParse(valeurApport.text) ?? 0.0;
  // 还款月数默认值设为1,避免除零异常
  final moisRemboursVal = double.tryParse(moisRembours.text) ?? 1.0;
  double res = salaireVal - (valeurApportVal / moisRemboursVal);
  return res;
}
  • 点击按钮时先做输入合法性校验,不符合条件直接拦截计算:
child: MaterialButton(
  minWidth: double.infinity,
  height: 60,
  onPressed: () {
    // 校验薪资输入合法性
    if (salaire.text.isEmpty || double.tryParse(salaire.text) == null) {
      // 可插入Toast/提示弹窗告知用户输入合法薪资
      return;
    }
    // 校验购置价值输入合法性
    if (valeurApport.text.isEmpty || double.tryParse(valeurApport.text) == null) {
      // 提示输入合法购置价值
      return;
    }
    // 校验还款月数合法性,不能为0避免除零异常
    if (moisRembours.text.isEmpty || double.tryParse(moisRembours.text) == null || double.parse(moisRembours.text) == 0) {
      // 提示输入合法还款月数
      return;
    }
    // 校验通过后执行计算
    final result = calcul(salaire, valeurApport, moisRembours);
    // 后续处理计算结果逻辑
  },
  // 其余按钮配置
)
  • 统一方法命名:确保调用的函数名和实际定义的函数名一致,避免调用不存在的方法。
  • 可选优化:给所有数值输入框设置keyboardType: TextInputType.numberWithOptions(decimal: true),限制用户仅能输入数字,从源头减少非法输入概率。

内容的提问来源于stack exchange,提问作者Learning Code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:10