我想在TextFormFields中输入三个数字。控制器是numOneController
和numTwoController
用于放置百分比,totalAmountController
用于放置数量。然后,我要检查百分比总数是否为100,以便我可以显示它们确实是100。当totalAmountController为空(null)时,显示其无效输入没有问题,但当numOneController
和numTwoController
为空时,我得到错误Invalid number (at character 1)
。我知道这是一个事实,处理器不能添加一个空的数字与另一个。但是我怎么处理这个,所以我可以检查它是否为空,然后我想分配一个数字0来自动添加。
sumHandler() {
var totalPrecent = int.parse(numOneController.text) +
int.parse(numTwoController.text) ;
var totalAmount = totalAmountController;
if (totalPrecent == 100 && totalAmount.text.isEmpty == false) {
debugPrint(totalPrecent.toString());
debugPrint(totalAmount.text.toString());
} else {
debugPrint("invalid input");
}
}
使用tryParse
方法和默认值将有助于…
sumHandler() {
var totalPrecent = int.tryParse(numOneController.text) ?? 0 +
int.tryParse(numTwoController.text) ?? 0;
var totalAmount = totalAmountController;
if (totalPrecent == 100 && totalAmount.text.isEmpty == false) {
debugPrint(totalPrecent.toString());
debugPrint(totalAmount.text.toString());
} else {
debugPrint("invalid input");
}
}
所以我找到了解决方案:另一个异常被抛出:FormatException:无效数字(在字符1)
我必须使用try catch block
:
try {
firstNumber = int.parse(numOneController.text);
} on FormatException {
firstNumber = 0;
}
这样我可以处理异常,并且在FormatException上我可以分配数字0。
创建一个临时变量并以0存储它,如果文本字段有值,则稍后为其赋值。像下面的
sumHandler() {
int firstNumber = 0;
int secondNumber = 0;
if(numOneController.text != "")
{
firstNumber = int.parse(numOneController.text);
}
if(numTwoController.text != "")
{
secondNumber = int.parse(numTwoController.text);
}
var totalPresent = firstNumber + secondNumber ;
var totalAmount = totalAmountController;
if (totalPresent == 100 && totalAmount.text.isEmpty == false) {
debugPrint(totalPresent.toString());
debugPrint(totalAmount.text.toString());
} else {
debugPrint("invalid input");
}
}