作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建自定义 InputTextFormatter。
格式化程序用空格分隔数千个,并将点后的字符数限制为 2 个字符。
我想将光标移动到 TextField 值的末尾,但根据我在达到限制(2 个字符)后尝试输入其他字符的次数,实际光标看起来会进一步移动。
看起来选择不适用于生成的 TextEditingValue。
重现步骤:
class MoneyFormatter extends TextInputFormatter {
MoneyFormatter({this.maxLength = 30, this.decimals = 0});
final int maxLength;
final int decimals;
@override
TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
print('---------- newValue.selection.extentOffset : ${newValue.selection.extentOffset}');
String output = newValue.text.formatAsCurrency(decimals: decimals);
var result = TextEditingValue(
text: output,
//this line doesn't have any effect
selection: TextSelection.collapsed(offset: output.length),
);
print('---------- result.selection.extentOffset : ${result.selection.extentOffset}');
return result;
}
}
result.selection.extentOffset
保持不变,但
newValue.selection.extentOffset
增加
1
尽管返回
selection: TextSelection.collapsed(offset: output.length)
extension FormatAsCurrency on String {
String formatAsCurrency({int decimals = 0, String ifNullReturn}) {
if (this == null) return ifNullReturn;
if (this.isEmpty) return '';
String output = this;
if (output[0] == '.') output = '0' + output;
var chunks = this.withoutTrailingDots.split('.');
output = chunks[0].separatedThousands;
if (decimals == 0 || chunks.length == 1) return output;
output += '.' + chunks[1].limitLengthTo(decimals).withoutTrailingZeros;
return output;
}
}
我知道还有其他
TextInputFormatter
在 pub.dev 上像
flutter_multi_formatter ,我都试过了,问题还是一样。
最佳答案
当我尝试使用带有键盘类型数字的格式化程序时,我发现了退格问题。光标倾向于跳过每个退格的字符。如果我使用键盘类型文本,它工作正常。
关于flutter - Backspace 不能与 TextInputFormatter 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64213551/
我正在尝试创建自定义 InputTextFormatter。 格式化程序用空格分隔数千个,并将点后的字符数限制为 2 个字符。 我想将光标移动到 TextField 值的末尾,但根据我在达到限制(2
我试图在 TextInputFormatter 中使用 NumberFromatter 但是当我尝试使用它时,它完全搞砸了!这是我的 TextInputFormatter 实现代码: class Nu
我是一名优秀的程序员,十分优秀!