flutter_debounce_throttle_hooks 1.0.0 copy "flutter_debounce_throttle_hooks: ^1.0.0" to clipboard
flutter_debounce_throttle_hooks: ^1.0.0 copied to clipboard

Flutter Hooks integration for flutter_debounce_throttle. Auto-dispose debounce and throttle controllers with HookWidget.

flutter_debounce_throttle_hooks #

Flutter Hooks integration for flutter_debounce_throttle. Auto-dispose debounce and throttle controllers with HookWidget.

Installation #

dependencies:
  flutter_debounce_throttle_hooks: ^1.0.0
  flutter_hooks: ^0.20.0

Quick Start #

import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_debounce_throttle_hooks/flutter_debounce_throttle_hooks.dart';

class SearchWidget extends HookWidget {
  @override
  Widget build(BuildContext context) {
    // Auto-dispose when widget unmounts
    final debouncer = useDebouncer(duration: Duration(milliseconds: 300));
    final throttler = useThrottler(duration: Duration(milliseconds: 500));

    // Convenient callback hooks
    final debouncedSearch = useDebouncedCallback<String>(
      (text) => searchApi(text),
      duration: Duration(milliseconds: 300),
    );

    return Column(
      children: [
        TextField(onChanged: debouncedSearch),
        ElevatedButton(
          onPressed: throttler.wrap(() => submit()),
          child: Text('Submit'),
        ),
      ],
    );
  }
}

Available Hooks #

Basic Hooks #

// Get controller instances (auto-dispose)
final debouncer = useDebouncer(duration: Duration(milliseconds: 300));
final throttler = useThrottler(duration: Duration(milliseconds: 500));
final asyncDebouncer = useAsyncDebouncer(duration: Duration(milliseconds: 300));
final asyncThrottler = useAsyncThrottler(maxDuration: Duration(seconds: 15));

Callback Hooks #

// Debounced callback
final debouncedSearch = useDebouncedCallback<String>(
  (text) => search(text),
  duration: Duration(milliseconds: 300),
);

// Throttled callback
final throttledSubmit = useThrottledCallback(
  () => submitForm(),
  duration: Duration(milliseconds: 500),
);

Value Hooks #

// Debounced value
final searchText = useState('');
final debouncedText = useDebouncedValue(searchText.value);

useEffect(() {
  if (debouncedText.isNotEmpty) {
    searchApi(debouncedText);
  }
  return null;
}, [debouncedText]);

// Throttled value (e.g., for scroll)
final scrollOffset = useState(0.0);
final throttledOffset = useThrottledValue(
  scrollOffset.value,
  duration: Duration(milliseconds: 16), // ~60fps
);

Complete Example #

class AutocompleteSearch extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final searchText = useState('');
    final results = useState<List<String>>([]);
    final isLoading = useState(false);

    final asyncDebouncer = useAsyncDebouncer(
      duration: Duration(milliseconds: 300),
    );

    Future<void> handleSearch(String text) async {
      searchText.value = text;
      if (text.isEmpty) {
        results.value = [];
        return;
      }

      isLoading.value = true;
      final result = await asyncDebouncer.run(() async {
        return await api.search(text);
      });

      if (result != null) {
        results.value = result;
      }
      isLoading.value = false;
    }

    return Column(
      children: [
        TextField(
          onChanged: handleSearch,
          decoration: InputDecoration(
            suffixIcon: isLoading.value
              ? CircularProgressIndicator()
              : Icon(Icons.search),
          ),
        ),
        Expanded(
          child: ListView.builder(
            itemCount: results.value.length,
            itemBuilder: (_, i) => ListTile(title: Text(results.value[i])),
          ),
        ),
      ],
    );
  }
}
0
likes
0
points
119
downloads

Publisher

verified publisherbrewkits.dev

Weekly Downloads

Flutter Hooks integration for flutter_debounce_throttle. Auto-dispose debounce and throttle controllers with HookWidget.

Repository (GitHub)
View/report issues

Topics

#debounce #throttle #flutter-hooks #async #ui

License

unknown (license)

Dependencies

flutter, flutter_debounce_throttle, flutter_hooks

More

Packages that depend on flutter_debounce_throttle_hooks