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

Flutter中如何将String转为int并避免转换异常?

问题原因

这两个错误的根源很清楚:

  • FormatException:从错误日志能看出pin.text是空字符串,int.parse没法把空字符串转成整数,直接抛出异常。
  • 类型转换错误:pin.text是String类型,用as int强制转换完全不对,Dart里String和int是不同类型,不能这么转。
解决办法

要搞定这个问题,得做两件事:先校验输入,再用安全的方式转成整数。

  1. 校验输入合法性:先确保用户输入的PIN不是空的,而且是纯数字
  2. 用安全转换方法:用int.tryParse替代int.parse,它解析失败时会返回null,不会直接抛出异常,方便我们处理错误

修改后的完整代码:

login2() async {
  var usernameU = username.text;
  var pinText = pin.text.trim(); // 去掉首尾空格,避免用户误输入空格导致解析失败

  // 先检查PIN是否为空
  if (pinText.isEmpty) {
    print("请输入PIN码");
    return;
  }

  // 安全转换为整数
  var pinU = int.tryParse(pinText);
  if (pinU == null) {
    print("PIN码必须是纯数字");
    return;
  }

  // 执行数据库查询,用try/catch替代then/catchError,可读性更好
  try {
    var tempUser = await DBProvider.db.getUser(usernameU, pinU);
    Navigator.push(context as BuildContext,
        MaterialPageRoute(builder: (context) => const WelcomePage()));
  } catch (err) {
    print('Error: $err');
  }
}
额外提示
  • trim()能处理用户不小心输入的前后空格,避免因为空格导致的解析失败
  • int.tryParse比int.parse更适合用户输入场景,毕竟没法保证用户一定输入合法数字
  • 把链式调用的then/catchError换成try/catch,代码逻辑更直观,也符合Dart异步代码的最佳写法

内容的提问来源于stack exchange,提问作者Andres Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:16