Bad state: Stream has already been listened to. is the error that sends most people to Stack Overflow, and the answer they find — “use .asBroadcastStream() ” — is usually the wrong fix. It makes the error go away and quietly changes the delivery semantics of your data. Two kinds of stream, and why the default is the strict one A single-subscription stream can be listened to exactly once. It buffers events until a listener arrives, and it delivers every event to that listener. File reads, HTTP response bodies, and async* functions produce these. A broadcast stream can have any number of listeners, delivers events only to those currently subscribed, and buffers nothing. A listener that arrives late has simply missed what came before. final single = StreamController < int >(); // single-subscription final bus = StreamController < int >. broadcast (); That “buffers nothing” is the crux. Converting a single-subscription stream to broadcast to silence an er...