Dart 2.0中Flutter空TextField下int.parse报错的if语句改写问题
解决Flutter中空输入导致
int.parse抛出FormatException的问题 这问题我之前处理TextField输入验证时也踩过坑!你原代码的逻辑顺序完全搞反了——先对空字符串调用int.parse(),直接就会抛出FormatException,根本走不到后面的非空判断环节。咱们得换个安全的方式来处理输入转换和验证。
核心问题分析
原代码的问题出在先转换再判断:
if (int.parse(weight).toString().isNotEmpty && int.parse(weight) > 0) return int.parse(weight) * multiplier; else print('Error');
当weight是空字符串时,int.parse(weight)直接触发Invalid number异常,因为空字符串无法解析成整数,这就是你看到报错的原因。
解决方案:用int.tryParse()替代int.parse()
Dart提供了int.tryParse()方法,它在解析失败时会返回null而不是抛出异常,完美适配这种需要容错的场景。我们可以先尝试解析输入,再判断解析结果是否有效。
改写后的代码:
final weight = _weightController.text; // 尝试解析,失败返回null final parsedWeight = int.tryParse(weight); // 先判断解析结果不为null,再判断是否大于0 if (parsedWeight != null && parsedWeight > 0) { return parsedWeight * multiplier; } else { print('Error: 请输入有效的正整数体重'); }
进阶优化:覆盖空白字符和非数字输入
如果想更严谨,还可以先把输入的空白字符去掉,再判断是否为空,避免用户输入全空格的情况;同时这种方式也能处理用户输入字母、符号等非数字内容的场景:
final weight = _weightController.text.trim(); if (weight.isNotEmpty) { final parsedWeight = int.tryParse(weight); if (parsedWeight != null && parsedWeight > 0) { return parsedWeight * multiplier; } } print('Error: 请输入有效的正整数体重');
内容的提问来源于stack exchange,提问作者GoharSahi
相关产品推荐
相关产品推荐

