一、金额输入框智能输入数字、小数点且只能有俩位小数,比如:
0.01、0.1、100
二、这里可以通过继承已有的FilteringTextInputFormatter
来实现会更方便些,首先要设置的就是只允许输入数字、小数点
class AmountTextFieldFormatter extends FilteringTextInputFormatter {final int digit;AmountTextFieldFormatter({this.digit = 2,bool allow = true,}) : super(RegExp('[0-9.]'), allow: allow);///省略部分代码...}
三、上面这样就限定好了输入内容,接下来就是进行输入的合法判断了
class AmountTextFieldFormatter extends FilteringTextInputFormatter {final int digit;String _oldText = '';///省略构造函数TextEditingValue formatEditUpdate(TextEditingValue oldValue,TextEditingValue newValue,) {final handlerValue = super.formatEditUpdate(oldValue, newValue);String value = handlerValue.text;int selectionIndex = handlerValue.selection.end;///如果输入框内容为.直接将输入框赋值为0.if (value == '.') {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 == '.') {count++;}});return count;}///获取目前的小数位数int _getValueDigit(String value) {if (value.contains('.')) {return value.split('.')[1].length;} else {return -1;}}
}