FxSubscriptions
Una bolsa de suscripciones, canceladas a la vez — para que el desmontaje sea una llamada en vez de un campo por stream.
Lección
Un objeto que escucha varios streams tiene que mantener viva cada
suscripción por un único motivo: volver a cancelarla más tarde. El
resultado es el montón conocido de campos nullables, cada uno declarado
arriba, cada uno asignado en initState, cada uno cancelado en
dispose; y la fuga siempre es la que alguien se olvidó de
añadir a la tercera lista.
FxSubscriptions reduce eso a un solo objeto.
add mete una suscripción en la bolsa y
la devuelve, así que se lee como una expresión y no como
una sentencia, y cancelAll() las termina todas. El desmontaje
se convierte en una sola línea: Future<void> dispose() =>
subs.cancelAll();
pauseAll() y resumeAll() son la versión suave,
para cuando el trabajo debe pararse sin que se deshaga el cableado: una
pantalla que pasa a segundo plano, una pestaña que pierde el foco. Las
suscripciones en pausa almacenan en vez de descartar, así que no se pierde
nada durante el hueco.
La bolsa se vacía antes de esperar sus cancelaciones, así que un
segundo cancelAll() durante la espera no puede cancelar nada
dos veces, y el mismo objeto puede albergar después una generación nueva
de suscripciones. Capa de eventos de fxdart, siguiendo a
CompositeSubscription de Rx.
Se lleva de forma natural con
stopOn: usa stopOn
cuando una cadena debe terminar porque algo ha pasado, y
FxSubscriptions cuando un conjunto de cadenas debe terminar
porque lo que las poseía se va.
Demo 1 · El dispose de una línea
Demo 2 · Pausar sin desmontar
Pruébalo tú
Ejercicio: addAll, y reutilizar la bolsa después de un cancel.