dispose method
Closes event streams and releases internal state.
After disposal, no further calls to public methods should be made.
Implementation
Future<void> dispose() async {
if (_disposed) return;
_disposed = true;
await _eventsController.close();
await _tokenStreamController.close();
}