我正在iPhone上测试数字验证。 这是我的代码片段:
child: new TextFormField(
controller: sales,
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration: const InputDecoration(
filled: true,
fillColor: CupertinoColors.white,
border: const OutlineInputBorder(),
labelText: ‘Sale amount’,
suffixText: ‘ZAR’,
suffixStyle:
const TextStyle(color: Colors.green)),
maxLines: 1,
validator: (val) {
if (val.isEmpty ) return 'Amount is required';
if (val.contains(",")) {
sales.text = val.replaceAll(new RegExp(r","), ".");
}
if (sales.text.indexOf(".") != sales.lastIndexOf(".")) {
return 'Enter valid amount.';
}
else
return null;
},
),
现在,我正在用这个数字25,52,85测试验证 - 这显然不是一个有效的数字,但它可能是iPhone的数字软键盘上允许的。 (另外有趣的是,在美国iPhone上,我们在数字软键盘上有逗号而不是fullstop,如果必须存储一个double,则必须将逗号转换为fulstops,我在代码中的validate方法中完成了以上)
现在,当我单击“完成”以验证表单时,错误会导致日志,并且它告诉我它是无效的Radix 10号码。换句话说,Flutter告诉我一个double不能存在,其中有两个逗号/ fullstops。
所以为了解决这个问题,我在这段代码中写了一下,验证这个数字是否包含2个以上的完整停止:
if (sales.text.indexOf(".") != sales.lastIndexOf(".")) {
return 'Enter valid amount.';
}
但是,我发现这很麻烦,并且想知道是否有办法更优雅地测试它?如何轻松验证数字是否有效?#/ p>
答案 0 :(得分:1)
.parse
是你的家伙。如果需要小数,请选择double.parse
,如果不想,请选择int.parse
。
选中此other StackOverFlow answer并举例说明