如何使用TextEditingController设置文本并将光标置于末尾?

时间:2020-08-15 04:00:38

标签: flutter

最小可复制代码:

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));
      },
    ),
  );
}

问题:

enter image description here

您可以在屏幕快照中清楚地看到有关该问题的信息,键入12将打印21,依此类推。您可能会问,将TextEditingController中的文本设置为onChanged传递的当前字符串有什么用,那么,我需要格式化当前字符串,但是即使最简单的字符串也无法设置文本。

1 个答案:

答案 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(',');
  }

互动示例参考:https://api.flutter.dev/flutter/widgets/TextEditingController-class.html#widgets.TextEditingController.1