Flutter 文本输入框 RTL 光标位置问题 n-1。

8
我不知道这个问题是否已经存在,但我尝试了所有的方法都没有成功找到解决方案。 问题是当在输入框中选择字母n时,光标会跳到n-1。该问题仅在rtl中出现,链接包含代码和问题视频。 代码: 这里放链接 视频: 这里放链接

请澄清您的具体问题或提供额外的细节,以准确突出您所需的内容。目前的描述不够清晰,很难确定您在询问什么。 - Community
在输入框中选择字母n时,光标会跳到n-1,问题已在视频中展示,该问题仅出现在RTL中。 - Ebrahim Halabi
1
@EbrahimHalabi 我也遇到了完全相同的问题,但还没有找到任何解决方案。请编辑您的问题并像您在评论中所描述的那样详细描述它,以便更清楚地了解情况。也许这可以帮助我们找到答案。 - Parisa Baastani
2个回答

4

我认为这是因为一些字符编码为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,
     ...
);

1
谢谢,我认为这是一个好的解决方案,但是我觉得你把问题转移到了前一个字母n-1上。 - Ebrahim Halabi

1

被提交为正确答案的答案在光标移动时不起作用,只有在点击时才有效。

您可以通过在文本编辑控制器上注册监听器并监视光标位置来解决此问题:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接