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

Flutter TextField点击表情按钮后TextEditingController文本还原为初始值

问题根源

你遇到的问题核心是每次Widget重绘时都会强制把TextEditingController的文本重置为初始值。点击表情键盘会触发Flutter的Widget rebuild,而你在_myTextFieldWidget()方法里每次都会执行controller.myTextEditingController.text = controller.initialValue;,这就导致输入表情前文本被强制还原。

另外,你在build方法里给controller的getParams和initialValue赋值也是错误的——build方法会被多次调用,这部分初始化逻辑应该只执行一次。

解决方案

1. 修正Controller的初始化逻辑

把参数获取、TextEditingController初始值设置移到GetX控制器的onInit方法中,确保只执行一次:

class MyClassController extends GetxController {
  late Map<String, String?> getParams;
  late String initialValue;
  late TextEditingController myTextEditingController;

  @override
  void onInit() {
    super.onInit();
    // 获取参数只执行一次
    getParams = Get.parameters;
    initialValue = getParams['key'] ?? '';
    // 初始化TextEditingController时直接设置初始值
    myTextEditingController = TextEditingController(text: initialValue);
  }

  @override
  void onClose() {
    // 销毁controller,避免内存泄漏
    myTextEditingController.dispose();
    super.onClose();
  }
}

2. 移除Widget中的重复赋值操作

在MyClass的build方法和_myTextFieldWidget里,删除所有给myTextEditingController.text赋值的代码,避免重绘时重置文本:

class MyClass extends GetView<MyClassController> {
  @override
  Widget build(BuildContext context) {
    // 移除原有的controller参数赋值逻辑
    return Scaffold(
      body: Column(
        children: [
          _myTextFieldWidget(),
          // 其他组件
        ],
      ),
    );
  }

  Widget _myTextFieldWidget() {
    // 移除这行:controller.myTextEditingController.text = controller.initialValue;
    return TextField(
      controller: controller.myTextEditingController,
      onChanged: (value) {
        // 你的业务逻辑
      },
      onEditingComplete: () {},
      // 其他配置
    );
  }
}

关键说明

  • GetX控制器的onInit是初始化逻辑的正确位置,只会在控制器创建时执行一次,不会因为Widget重绘重复执行。
  • 直接在TextEditingController构造时传入初始值,避免后续手动赋值导致的重复重置问题。
  • 一定要在onClose中销毁TextEditingController,防止内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:09