我正在使用flutter_masked_text来格式化我的 Controller ,以便自动在我的货币字段中添加千位分隔符。我正在使用它来实现这一目标。
var controller = new MoneyMaskedTextController(decimalSeparator: '.', thousandSeparator: ',');
我不喜欢它的工作方式,因为它从
0.00
开始,并自动开始从小数部分开始添加数字。如果我键入1000
,它应该变成1,000
而不是1,000.00
。有没有一种方法可以格式化 Controller 字段以添加不带小数点分隔符的千位分隔符?
最佳答案
我使用自定义文本输入格式化程序来执行以下操作:
class CustomTextInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
if (newValue.text.length == 0) {
return newValue.copyWith(text: '');
} else if (newValue.text.compareTo(oldValue.text) != 0) {
int selectionIndexFromTheRight =
newValue.text.length - newValue.selection.extentOffset;
List<String> chars = newValue.text.replaceAll(' ', '').split('');
String newString = '';
for (int i = 0; i < chars.length; i++) {
if (i % 3 == 0 && i != 0) newString += ' ';
newString += chars[i];
}
return TextEditingValue(
text: newString,
selection: TextSelection.collapsed(
offset: newString.length - selectionIndexFromTheRight,
),
);
} else {
return newValue;
}
}
}
然后在您的TextField上:
TextField(
controller: _textController,
keyboardType: TextInputType.number,
inputFormatters: [CustomTextInputFormatter()],
)
关于flutter - 文本分隔符上的千位分隔符不带小数点分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61866207/