Flutter TextField:选择 RTL TextField 时光标位置会移到最后一个之前的位置

Ami*_* HP 16 flutter

我有一个TextField将其textDirection设置为rtl(从右到左)。当我选择 时TextField,我希望光标像往常一样转到末尾,但光标转到末尾之前的一个位置。

这就是结果

 TextField(
    textDirection: TextDirection.rtl,
    controller: widget.controller,
    decoration: InputDecoration(
      contentPadding: EdgeInsets.all(8),
      isDense: true,
      focusedBorder: OutlineInputBorder(
        borderSide: BorderSide(
          width: 2,
          color: Theme.of(context).primaryColor,
        ),
        borderRadius: BorderRadius.circular(8),
      ),
      enabledBorder: OutlineInputBorder(
        borderSide: BorderSide(
          width: 1.7,
          color: Colors.grey.withOpacity(0.3),
        ),
        borderRadius: BorderRadius.circular(8),
      ),
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)

如何让光标出现在末尾?

更新:我意识到在中指定控制器会导致TextField问题出现。但在这种情况下我需要控制器。

小智 19

我认为这是因为每个阿拉伯字符都编码为 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,
     ...
);
Run Code Online (Sandbox Code Playgroud)