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

使用GetX如何监听TextEditingController的内部文本变化?

问题原因

你当前的写法是将TextEditingController实例本身封装为Rx对象,GetX的响应式机制默认仅在Rx.value的内存引用发生变化时才会触发监听回调。输入文本修改的是controller实例内部的text属性,controller实例本身没有被替换,因此debounce监听不会被触发。

修复方案

推荐采用同步controller文本到独立响应式变量的方式实现需求,代码调整如下:

class Controller extends GetxController{
  // 用于响应式监听输入内容的变量
  final inputText = ''.obs;
  late final TextEditingController txtList;

  @override
  void onInit() {
    super.onInit();
    txtList = TextEditingController();
    // 绑定controller的文本变化同步到响应式变量
    txtList.addListener(() {
      inputText.value = txtList.text;
    });
    // 防抖监听输入内容变化
    debounce(inputText, (content) { 
      print("debounce $content");
    }, time: const Duration(seconds: 1));
  }

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

UI侧无需额外调整,仍将txtList直接绑定到TextField的controller属性即可。

注意事项
  • 上述方案的防抖逻辑仅在输入停止满1秒后触发回调,符合防抖的常规使用场景
  • 必须在onClose生命周期中销毁TextEditingController,否则会产生内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:45:08