debounceOn, delayOn & throttleOn

Tiempo impulsado por selector: cada valor nombra el stream que decide cuándo le toca — debounce, delay y throttle sin un Duration.

FxEvents<T> FxEvents<T>.debounceOn(Stream<void> Function(T value) selector) // chain (events) FxEvents<T> FxEvents<T>.delayOn(Stream<void> Function(T value) selector) FxEvents<T> FxEvents<T>.throttleOn(Stream<void> Function(T value) selector, {bool leading = true, bool trailing = false})

Lección

Las formas con Duration ya viven en debounce, throttle y delay — un reloj fijo, la misma espera para cada valor. La familia xOn entrega ese reloj a un selector: cada valor produce un stream, y el primer evento de ese stream es el momento en que el valor toca. Espera un blur en vez de 300ms; debounce consultas más largas durante más tiempo; libera un valor retenido cuando dispara un botón en vez de cuando lo hace un temporizador.

debounceOn(selector) es debounce de flanco de bajada con ese stream como ventana de calma. Un valor más nuevo aborta el interior anterior y arranca uno fresco; el primer next del interior emite el valor pendiente; un interior que completa sin un next lo descarta. Un valor aún pendiente cuando la fuente se cierra se vacía, igual que el debounce con Duration.

delayOn(selector) retiene cada valor hasta que su propio interior dispara — nada se aborta, así que dos valores en vuelo pueden adelantarse si sus selectores lo hacen, igual que el delayWhen de Rx. El cierre espera a los interiores pendientes; los errores se reenvían de inmediato, ya que solo los datos merecen retenerse.

throttleOn(selector) emite como máximo un evento por ventana interior: leading (activado por defecto, como la forma stream de throttle) conserva el primero de la ventana; trailing conserva el más reciente visto cuando el interior dispara, o cuando la fuente se cierra a mitad de ventana. Capa de eventos de fxdart, según las formas con selector de debounce, delayWhen y throttle de Rx.

Demo 1 · Una ráfaga, liberada cuando dispara su selector

Demo 2 · Retenido hasta que un notificador diga adelante

Pruébalo tú

Ejercicio: un offset de scroll por ventana interior, flanco de subida.

Relacionado: debounce — la forma con Duration, y el wrapper de callback · throttle — la forma con Duration, leading y trailing · delay — desplazar un stream entero con un reloj fijo