sampleOn

Emite el valor más reciente de la fuente cada vez que dispara el stream disparador — la fuente pone los valores, el disparador pone el ritmo.

FxEvents<T> FxEvents<T>.sampleOn(Stream<void> trigger) // chain (events)

Lección

Un sensor se actualiza doscientas veces por segundo; la pantalla se repinta sesenta. Procesar cada actualización es trabajo desperdiciado — lo que el consumidor quiere de verdad es el valor más reciente, a su propio ritmo. sampleOn(trigger) es exactamente esa separación: el stream fuente aporta los valores, el stream disparador aporta los momentos, y cada evento del disparador emite el último valor de la fuente.

Dos detalles lo mantienen honesto. Un disparador que dispara cuando no ha llegado nada nuevo se queda en silencio — nunca ves el mismo valor dos veces seguidas solo porque el reloj hizo tic. Y los valores superados entre disparos se descartan, no se encolan: es un operador con pérdidas por diseño, para streams de tipo estado donde solo importa la lectura más reciente.

La vida útil sigue a la fuente: cuando la fuente se cierra, la cadena se cierra y la suscripción al disparador se cancela — un tic infinito de Stream.periodic es un disparador perfectamente válido. Compara con los vecinos: throttle limita la tasa con una ventana fija medida desde los propios eventos de la fuente; sampleOn le entrega el calendario por completo a un segundo stream. Capa de eventos de fxdart, según el sample de Rx.

Demo 1 · El disparador pone el ritmo

Demo 2 · Silencio cuando no hay nada nuevo, se cierra con la fuente

Pruébalo tú

Ejercicio: una posición de arrastre por frame.

Relacionado: throttle — limitación de tasa desde el propio timing de la fuente · debounce — esperar la calma en lugar de muestrear · withLatestFrom — la misma idea de «valor más reciente», pero combinando dos streams de datos