onChange TextField 移动光标以开始颤动
onChange TextField move cursor to start in flutter
我尝试在 TextField
中使用 onChange
方法检查输入,但在用 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)
使用 TextEditingController
设置选择
TextField(
controller: textEditController,
onChanged: (content) {
textEditController..text = checkNumber(content)
..selection = TextSelection.collapsed(offset: 0);
},
)
接受的解决方案对我不起作用 - 因为我设置了 text 和 selection 我需要改为设置 值.
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();
}
这会强制输入的文本为小写,并将光标保持在输入的末尾。
**如果你想随文本动态移动光标**
setState(() {
String text = "sometext";
_controller.value = TextEditingValue(
text: text,
selection: TextSelection(
baseOffset: text.length,
extentOffset: text.length)
);
});
我尝试在 TextField
中使用 onChange
方法检查输入,但在用 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)
使用 TextEditingController
TextField(
controller: textEditController,
onChanged: (content) {
textEditController..text = checkNumber(content)
..selection = TextSelection.collapsed(offset: 0);
},
)
接受的解决方案对我不起作用 - 因为我设置了 text 和 selection 我需要改为设置 值.
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();
}
这会强制输入的文本为小写,并将光标保持在输入的末尾。
**如果你想随文本动态移动光标**
setState(() {
String text = "sometext";
_controller.value = TextEditingValue(
text: text,
selection: TextSelection(
baseOffset: text.length,
extentOffset: text.length)
);
});