You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter RTL语言(如波斯语)下TextFormField光标定位异常问题

Flutter RTL语言下TextFormField光标跳转问题解决办法

使用波斯语等RTL语言时,TextFormField内将光标移至文本末尾(位置n),光标会自动跳转到末尾前一位(n-1),现有公开方案无效时可尝试以下方案:

自定义TextEditingController处理光标

创建专属控制器,重写光标设置逻辑,强制RTL文本光标定位到真正的末尾:

class RTLTextEditingController extends TextEditingController {
  @override
  set selection(TextSelection newSelection) {
    final text = this.text;
    if (text.isNotEmpty && newSelection.baseOffset == text.length) {
      super.selection = TextSelection.collapsed(offset: text.length);
    } else {
      super.selection = newSelection;
    }
  }
}

在TextFormField中使用该控制器:

TextFormField(
  controller: RTLTextEditingController(),
  textDirection: TextDirection.rtl,
  // 其他配置项
)

监听文本变化手动修正光标

若上述方案无效,可通过监听控制器状态,手动修正光标位置:

final TextEditingController _controller = TextEditingController();

@override
void initState() {
  super.initState();
  _controller.addListener(() {
    final text = _controller.text;
    final selection = _controller.selection;
    if (text.isNotEmpty && selection.baseOffset == text.length - 1 && selection.isCollapsed) {
      _controller.selection = TextSelection.collapsed(offset: text.length);
    }
  });
}

// 组件构建代码
TextFormField(
  controller: _controller,
  textDirection: TextDirection.rtl,
)

升级Flutter版本

部分老版本Flutter对RTL文本的光标处理存在原生bug,建议升级至最新稳定版(如3.10及以上),多数RTL相关问题已在新版本中修复。

内容的提问来源于stack exchange,提问作者Salar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:12:47