flutter - 如何监听TextController内部的变化?

标签 flutter flutter-getx

我正在使用 GetX。我需要监听 TextController 中的更改。以下代码不起作用:

class Controller extends GetxController{

  final txtList = TextEditingController().obs;

  @override
  void onInit() {
    debounce(txtList, (_) { 
      print("debouce$_");
      }, time: Duration(seconds: 1));
    super.onInit();
  }

}

当我从 UI 更改 txtList 值时,它不会打印任何内容。我想这是因为它没有检查 txtList 内的文本字段。

如何让它发挥作用?

最佳答案

您需要将 RxInterface 传递到 debounce 中才能通过 GetX 执行此操作。只需创建一个 RxString 并向 Controller 添加一个监听器,然后将 RxString 传递到 debounce 即可。

class Controller extends GetxController {
  final txtList = TextEditingController();

  RxString controllerText = ''.obs;

  @override
  void onInit() {
    txtList.addListener(() {
      controllerText.value = txtList.text;
    });
    
    debounce(controllerText, (_) {
      print("debouce$_");
    }, time: Duration(seconds: 1));
    super.onInit();
  }
}

然后,在应用程序的任何页面上,您可以将该 Controller 传递到文本字段中,它会在用户停止键入 1 秒后打印该值。

class Home extends StatelessWidget {
 final controller = Get.put(Controller());

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: TextField(controller: controller.txtList), // this will print
      ),
    );
  }
}

如果您需要该值用于其他任何用途,也可以随时通过 controller.controllerText.value 访问该值。

关于flutter - 如何监听TextController内部的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69741183/

相关文章:

stack - Flutter - 改变堆叠顺序

http - Flutter consolidateHttpClientResponseBytes未定义错误?

使用 getX 进行 Flutter 图像选择器

flutter - 如何在 FutureBuilder Future.wait 函数中缓存 Future,以便在每次状态更改时不重建

flutter 如何在 GetView<Controller> 类中实现动画

flutter - 行中顶部对齐图标

flutter - 长按 Flutter 中的底部导航栏项目后如何禁用弹出/ toast ?

flutter - 带有 GetX 标签的多个实例在 flutter 中不起作用

Flutter:如何通过GetxController控制PageView?

Flutter Vertical Tab 仅在水平方向滚动