一、金额输入框智能输入数字、小数点且只能有俩位小数,比如:
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;
}
}
}