Search code examples
flutterdartdelaytextfield

How to detect user has stopped typing in TextField?


I am using a TextField under which onChanged function

I am calling my code but the issue right now is the code gets execute everytime a new word is either entered or deleted.

what I am looking for is how to recognize when a user has stopped typing.

means adding some delay or something like that.

I have tried adding delay also using Future.delayed function but that function also gets executed n number of times.

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

Solution

  • Thanks to @pskink

    I was able to achieve the functionality I was looking for.

    import stream_transform package in your pubspec.yaml

    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 code

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