void dispose() { if (_sub != null) _sub.cancel(); _observers.forEach((o) => o.close()); _observers.clear(); }