我认为这是因为一些字符编码为2到4个字节。
无论如何,这段代码可以解决问题。
TextField(
onTap: (){
if(controller.selection == TextSelection.fromPosition(TextPosition(offset: controller.text.length -1))){
setState(() {
controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));
});
}
},
controller: controller,
...
);
被提交为正确答案的答案在光标移动时不起作用,只有在点击时才有效。
您可以通过在文本编辑控制器上注册监听器并监视光标位置来解决此问题:
@override
void initState() {
super.initState();
_textEditingController.addListener((){
if (_textEditingController != null) {
if (_textEditingController.selection ==
TextSelection.fromPosition(
TextPosition(
offset: _textEditingController.text.length -
1,
),
)) {
_textEditingController.selection =
TextSelection.fromPosition(
TextPosition(
offset: _textEditingController.text.length,
),
);
}
}
}
);
}