onChange TextField移动光标以开始抖动

时间:2019-02-21 11:53:24

标签: flutter textfield

我尝试在onChange中使用TextField方法检查输入,但是用TextEditingController替换文本后,将光标移到TextField的开头。

仅在Android平台上会发生此问题。

代码

TextField(
controller: textEditController,
onChanged: (content) {
                    textEditController.text = checkNumber(content);
                  },)

flutter版本

[✓] Flutter (Channel master, v1.2.2-pre.41, on Mac OS X 10.14.3 18D109, locale
    en-IR)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)

3 个答案:

答案 0 :(得分:4)

使用TextEditingController

设置选择
TextField(
controller: textEditController,
onChanged: (content) {
  textEditController..text = checkNumber(content)
                    ..selection = TextSelection.collapsed(offset: 0);
  },
)

答案 1 :(得分:1)

接受的解决方案对我不起作用-因为我同时设置了文本选择,因此我需要设置。< / p>

TextEditingController class文档指出:

可以从添加到此控制器的侦听器中设置文本或选择属性。如果两个属性都需要更改,则应该设置控制器的值。

文档中还有一个相关示例,包括以下内容:

void initState() {
  _controller.addListener(() {
    final text = _controller.text.toLowerCase();
    _controller.value = _controller.value.copyWith(
      text: text,
      selection: TextSelection(baseOffset: text.length, extentOffset: text.length),
      composing: TextRange.empty,
    );
  });
  super.initState();
}

这将强制输入的文本为小写字母,并将光标保持在输入的末尾。

答案 2 :(得分:0)

**如果要动态移动带有文本的光标**

setState(() {

    String text = "sometext";

    _controller.value = TextEditingValue(
             text: text,
             selection: TextSelection(
                       baseOffset: text.length,
                       extentOffset: text.length)
    );
});