如何检测用户已停止在 TextField 中输入?

How to detect user has stopped typing in TextField?

我正在使用 TextField,在 onChanged 函数下

我正在调用我的代码,但现在的问题是每次输入或删除新单词时代码都会执行。

我正在寻找的是如何识别用户何时停止输入

意味着添加一些延迟或类似的东西。

我尝试添加 delay 也使用 Future.delayed 函数,但该函数也被执行了 n 次。

TextField(
   controller: textController,
   onChanged: (val) {
            if (textController.text.length > 3) {
              Future.delayed(Duration(milliseconds: 450), () {
                 //code here
              });
            }
            setState(() {});
          },
 )

感谢@pskink

我能够实现我正在寻找的功能。

在您的 pubspec.yaml

中导入 stream_transform 包

stream_transform: ^0.0.19

import 'package:stream_transform/stream_transform.dart';

StreamController<String> streamController = StreamController();

@override
void initState() {
  streamController.stream
    .transform(debounce(Duration(milliseconds: 400)))
    .listen((s) => _validateValues());

  super.initState();
}

//function I am using to perform some logic
_validateValues() {
  if (textController.text.length > 3) {
     // code here
  }else{
     // some other code here
  }
}

TextField 代码

TextField(
   controller: textController,
   onChanged: (val) {
        streamController.add(val);
     },
)

在我的例子中,我还需要 flutter async。

//pubspec.yaml
stream_transform: ^2.0.0

import 'dart:async';
import 'package:stream_transform/stream_transform.dart';

StreamController<String> streamController = StreamController();

// In init function
streamController.stream
    .debounce(Duration(seconds: 1))
    .listen((s) => { 
       // your code 
     });

// In build function
TextField(
   style: TextStyle(fontSize: 16),
   controller: messageController,
   onChanged: (val) {
     myMetaRef.child("isTyping").set(true);
     streamController.add(val);
     },
   )