This commit is contained in:
Phuoc Nguyen
2025-10-10 16:38:07 +07:00
parent e5b247d622
commit b94c158004
177 changed files with 25080 additions and 152 deletions

View File

@@ -0,0 +1,102 @@
/// Performance utility for debouncing rapid function calls
///
/// Use cases:
/// - Search input (300ms delay before search)
/// - Auto-save functionality
/// - API request rate limiting
/// - Scroll position updates
import 'dart:async';
import 'package:flutter/foundation.dart';
/// Debouncer utility to prevent excessive function calls
///
/// Example usage:
/// ```dart
/// final searchDebouncer = Debouncer(milliseconds: 300);
///
/// void onSearchChanged(String query) {
/// searchDebouncer.run(() {
/// performSearch(query);
/// });
/// }
/// ```
class Debouncer {
final int milliseconds;
Timer? _timer;
Debouncer({required this.milliseconds});
/// Run the action after the debounce delay
void run(VoidCallback action) {
_timer?.cancel();
_timer = Timer(Duration(milliseconds: milliseconds), action);
}
/// Cancel any pending debounced action
void cancel() {
_timer?.cancel();
}
/// Dispose of the debouncer
void dispose() {
_timer?.cancel();
}
}
/// Throttler utility to limit function call frequency
///
/// Example usage:
/// ```dart
/// final scrollThrottler = Throttler(milliseconds: 100);
///
/// void onScroll() {
/// scrollThrottler.run(() {
/// updateScrollPosition();
/// });
/// }
/// ```
class Throttler {
final int milliseconds;
Timer? _timer;
bool _isReady = true;
Throttler({required this.milliseconds});
/// Run the action only if throttle period has passed
void run(VoidCallback action) {
if (_isReady) {
_isReady = false;
action();
_timer = Timer(Duration(milliseconds: milliseconds), () {
_isReady = true;
});
}
}
/// Cancel throttler
void cancel() {
_timer?.cancel();
_isReady = true;
}
/// Dispose of the throttler
void dispose() {
_timer?.cancel();
}
}
/// Search-specific debouncer with common configuration
class SearchDebouncer extends Debouncer {
SearchDebouncer() : super(milliseconds: 300);
}
/// Auto-save debouncer with longer delay
class AutoSaveDebouncer extends Debouncer {
AutoSaveDebouncer() : super(milliseconds: 1000);
}
/// Scroll throttler for performance
class ScrollThrottler extends Throttler {
ScrollThrottler() : super(milliseconds: 100);
}