import 'dart:async';

import 'package:flutter/material.dart';

class Debounce {
  Debounce(Duration interval) : _interval = interval.inMilliseconds;
  final int _interval;
  Timer? _timer;
  VoidCallback? action;

  void call(VoidCallback? action) {
    this.action = action;
    _timer?.cancel();
    _timer = Timer(Duration(milliseconds: _interval), _callAndRest);
  }

  void _callAndRest() {
    action?.call();
    _timer = null;
  }

  void dispose() {
    _timer?.cancel();
    _timer = null;
  }
}