Home > Blockchain >  Fire something inside a listener only if n seconds have passed since receiving last event
Fire something inside a listener only if n seconds have passed since receiving last event

Time:02-28

I am listening to an event, however, I don't want to print the event every time. There is an event being sent every second but I don't want my print to work every second. How can I make the print inside this listener to fire only, if 10 seconds is past since last event?

For e.g I receive an event, I use the print. I want to store the event somewhere, if 10 seconds is passed since last event, accept another event -> print and so on.

  _controller.onLocationChanged.listen((event) {
      print(event);
    });

CodePudding user response:

You may try something related to an asynchronous method as such. The following code will set the _isListening variable to true after 10 seconds, which will enable the listener to do it's action once again.

class YourClass{
    bool _isListening = true;
    
    void yourMethod() {

      _controller.onLocationChanged.listen((event) {

      if(_isListening){
        _isListening = false;
        print(event);
        Future.delayed(const Duration(seconds: 10)).then((_) => _isListening=true);
      }

    });
  }
}

CodePudding user response:

Use the Timer like below:

    Timer(const Duration(seconds: 10), (){
      print("...");
    });
  • Related