最小可复制代码:
final _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: TextField(
controller: _controller,
keyboardType: TextInputType.number,
onChanged: (string) {
_controller.text = string; // Removing this works though!
_controller.selection = TextSelection.fromPosition(TextPosition(offset: _controller.text.length));
},
),
);
}
问题:
您可以在屏幕快照中清楚地看到有关该问题的信息,键入12
将打印21
,依此类推。您可能会问,将TextEditingController
中的文本设置为onChanged
传递的当前字符串有什么用,那么,我需要格式化当前字符串,但是即使最简单的字符串也无法设置文本。
答案 0 :(得分:0)
我认为这可以为您做魔术!
onChanged: (newText) {
var text = formatString(newText);
_controller.value = _controller.value.copyWith(
text: text,
selection: TextSelection.collapsed(offset: text.length),
);
}
进行这样的格式化,不要忘记每次以已格式化的值传递newText时。
(在这种情况下,我替换了所有逗号以恢复原始字符串)
String formatString(String newText){
return newText.replaceAll(',', '').split('').join(',');
}