useDebounced<T> function

T useDebounced<T>(
  1. T value, {
  2. required Duration duration,
})

Implementation

T useDebounced<T>(T value, {required Duration duration}) {
  return useDebugGroup(
    debugLabel: "useDebounced<$T>()",
    debugFillProperties: (builder) => builder
      ..add(DiagnosticsProperty("value", value))
      ..add(DiagnosticsProperty("duration", duration)),
    () {
      final valueState = useState(value);
      final isMounted = useIsMounted();

      useEffect(() {
        final timer = Timer(duration, () {
          if (isMounted()) valueState.value = value;
        });
        return timer.cancel;
      }, [value]);

      return valueState.value;
    },
  );
}