Flutter中如何将String转为int并避免转换异常?
问题原因
这两个错误的根源很清楚:
FormatException:从错误日志能看出pin.text是空字符串,int.parse没法把空字符串转成整数,直接抛出异常。- 类型转换错误:
pin.text是String类型,用as int强制转换完全不对,Dart里String和int是不同类型,不能这么转。
解决办法
要搞定这个问题,得做两件事:先校验输入,再用安全的方式转成整数。
- 校验输入合法性:先确保用户输入的PIN不是空的,而且是纯数字
- 用安全转换方法:用
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
相关产品推荐
相关产品推荐

