台州企业建站程序,村级网站建设助力脱贫攻坚,中国建筑网官网校园招聘,建设网站建设方案一、实现的效果 二、金额输入框基本要求
只能输入.和数字小数点后只能有俩位小数点不能作为开头
三、在iOS设备上这里还有个坑#xff0c;数字键盘上这个小数点会根据你手机设置的不同国家地区来决定显示是.还是, 如下 所以这个时候最好的解决办法是允许输入.、数字和,然后在…一、实现的效果 二、金额输入框基本要求
只能输入.和数字小数点后只能有俩位小数点不能作为开头
三、在iOS设备上这里还有个坑数字键盘上这个小数点会根据你手机设置的不同国家地区来决定显示是.还是, 如下 所以这个时候最好的解决办法是允许输入.、数字和,然后在动态的将,替换成. 四、完整代码
import package:flutter/services.dart;class AmountTextFieldFormatter extends FilteringTextInputFormatter {final int digit;final String _decimalComma ,;final String _decimalDot .;String _oldText ;AmountTextFieldFormatter({this.digit 2,bool allow true,}) : super(RegExp([0-9.,]), allow: allow);overrideTextEditingValue formatEditUpdate(TextEditingValue oldValue,TextEditingValue newValue,) {///替换,为.if (newValue.text.contains(_decimalComma)) {newValue newValue.copyWith(text: newValue.text.replaceAll(_decimalComma, _decimalDot),);}final handlerValue super.formatEditUpdate(oldValue, newValue);String value handlerValue.text;int selectionIndex handlerValue.selection.end;///如果输入框内容为.直接将输入框赋值为0.if (value _decimalDot) {value 0.;selectionIndex;}if (_getValueDigit(value) digit || _pointCount(value) 1) {value _oldText;selectionIndex _oldText.length;}_oldText value;return TextEditingValue(text: value,selection: TextSelection.collapsed(offset: selectionIndex),);}///输入多个小数点的情况int _pointCount(String value) {int count 0;value.split().forEach((e) {if (e _decimalDot) {count;}});return count;}///获取目前的小数位数int _getValueDigit(String value) {if (value.contains(_decimalDot)) {return value.split(_decimalDot)[1].length;} else {return -1;}}
}