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.
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.