df_debouncer 0.5.3 copy "df_debouncer: ^0.5.3" to clipboard
df_debouncer: ^0.5.3 copied to clipboard

A package that provides a practical Debouncer for optimizing performance by controlling the frequency of function calls in response to rapid events.

pub tag buymeacoffee sponsor patreon discord instagram license


Summary #

Lightweight building blocks for controlling the rate of function calls in response to rapid events:

  • Debouncer — delays running an action until things have been quiet for a chosen window. Supports leading-edge (onStart), per-call (onCall), and trailing-edge (onWaited) callbacks, plus finalize() to flush a pending wait and dispose() to abandon it.
  • Throttle — runs an action at most once per cool-down window. Ships with presets for common refresh rates (Throttle24Hz, Throttle30Hz, Throttle48Hz, Throttle60Hz, Throttle120Hz) and ThrottleImmediate for no-op throttling.
  • CacheManager<T> — a small in-memory cache with optional per-entry expiration. Re-caching a key cancels its previous expiration timer, so values are never silently evicted by a stale timer.

Installation #

dart pub add df_debouncer
# or, for a Flutter project:
flutter pub add df_debouncer

Usage #

Debouncer #

import 'package:df_debouncer/df_debouncer.dart';

final autosave = Debouncer(
  delay: const Duration(milliseconds: 500),
  onStart: () => print('Saving...'),       // first call in a burst
  onCall:  () => print('Form changed'),    // every call
  onWaited: () => print('Saved to db'),    // 500ms after the last call
);

// Trigger from rapid events:
autosave();
autosave();
autosave();

// Flush a pending wait right now (e.g. in dispose):
await autosave.finalize();

// Or drop the pending wait without running onWaited:
autosave.dispose();

Throttle #

final throttle = Throttle60Hz(); // at most ~60 calls per second
void onPointerMove(Offset p) {
  throttle.run(() => repaint(p));
}

// Clear the cool-down early:
throttle.cancel();

CacheManager #

final cache = CacheManager<String>();
cache.cache('greeting', 'hello', cacheDuration: const Duration(minutes: 5));

final greeting = cache['greeting']; // 'hello' (or null once expired)

cache.remove('greeting');
cache.clear();

🔍 For more information, refer to the API reference.


💬 Contributing and Discussions #

This is an open-source project, and we warmly welcome contributions from everyone, regardless of experience level. Whether you're a seasoned developer or just starting out, contributing to this project is a fantastic way to learn, share your knowledge, and make a meaningful impact on the community.

☝️ Ways you can contribute #

  • Find us on Discord: Feel free to ask questions and engage with the community here: https://discord.gg/gEQ8y2nfyX.
  • Share your ideas: Every perspective matters, and your ideas can spark innovation.
  • Help others: Engage with other users by offering advice, solutions, or troubleshooting assistance.
  • Report bugs: Help us identify and fix issues to make the project more robust.
  • Suggest improvements or new features: Your ideas can help shape the future of the project.
  • Help clarify documentation: Good documentation is key to accessibility. You can make it easier for others to get started by improving or expanding our documentation.
  • Write articles: Share your knowledge by writing tutorials, guides, or blog posts about your experiences with the project. It's a great way to contribute and help others learn.

No matter how you choose to contribute, your involvement is greatly appreciated and valued!

☕ We drink a lot of coffee... #

If you're enjoying this package and find it valuable, consider showing your appreciation with a small donation. Every bit helps in supporting future development. You can donate here: https://www.buymeacoffee.com/dev_cetera

LICENSE #

This project is released under the MIT License. See LICENSE for more information.

3
likes
50
points
420
downloads

Publisher

verified publisherdev-cetera.com

Weekly Downloads

A package that provides a practical Debouncer for optimizing performance by controlling the frequency of function calls in response to rapid events.

Homepage
Repository (GitHub)
View/report issues

Topics

#debouncer #reactive #throttle #user-interface #utility

Funding

Consider supporting this project:

www.buymeacoffee.com
www.patreon.com
github.com

License

MIT (license)

Dependencies

clock, df_safer_dart, df_type

More

Packages that depend on df_debouncer