// Dart imports:
import 'dart:async';

// Flutter imports:
import 'package:flutter/material.dart';

///
/// Компонент для выполнения отложенных операций
///
class Debouncer {
  ///
  /// Компонент для выполнения отложенных операций
  ///
  /// Пример использования
  ///
  /// ```dart
  /// final Debouncer _searchDelayer = Debouncer(
  ///   delay: const Duration(milliseconds: 300),
  /// );
  ///
  /// Widget _buildButton(BuildContext) {
  ///   return ElevatedButton(
  ///     onPressed: () {
  ///       _debouncer.run(() {
  ///         debugPrint('Type your code here');
  ///       });
  ///     },
  ///   );
  /// }
  /// ```
  ///
  Debouncer({
    required this.delay,
  });

  /// Время через которое необходимо вызывать функцию
  final Duration delay;

  /// Таймер
  Timer? _timer;

  ///
  /// Запуск отложенного события
  ///
  void run(VoidCallback action) {
    _timer?.cancel();

    _timer = Timer(delay, action);
  }
}
