我正在使用 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/