add method
override
Adds stream
as a member of this group.
Any events from stream
will be emitted through this.stream
. If this
group has a listener, stream
will be listened to immediately; otherwise
it will only be listened to once this group gets a listener.
If this is a single-subscription group and its subscription has been
canceled, stream
will be canceled as soon as its added. If this returns
a Future, it will be returned from add. Otherwise, add returns
null
.
Throws a StateError if this group is closed.
Implementation
Future add(Stream<T> stream) {
if (_closed) {
throw new StateError("Can't add a Stream to a closed StreamGroup.");
}
if (_state == _StreamGroupState.dormant) {
_subscriptions.putIfAbsent(stream, () => null);
} else if (_state == _StreamGroupState.canceled) {
// Listen to the stream and cancel it immediately so that no one else can
// listen, for consistency. If the stream has an onCancel listener this
// will also fire that, which may help it clean up resources.
return stream.listen(null).cancel();
} else {
_subscriptions.putIfAbsent(stream, () => _listenToStream(stream));
}
return null;
}