BloomRealtimeClient class

Client-side Realtime manager that connects to a Bloom WebSocket endpoint.

Provides resilient real-time features over WebSockets:

  • Pub/Sub channel subscriptions returning a Stream<Map<String, dynamic>>
  • Presence tracking with state snapshots, joins, and leaves
  • Automatic exponential backoff reconnection with jitter and maximum delay cap
  • Automatic re-subscription to channels and presence channels after reconnection
  • Periodic heartbeat ping/pong keep-alives

Example

final client = BloomRealtimeClient(
  uri: Uri.parse('ws://localhost:8080/ws/realtime'),
);

// Listen to connection state changes
client.onStateChanged.listen((state) {
  print('Connection state: $state');
});

await client.connect();

// Subscribe to a channel
final chatStream = client.subscribe('chat:lobby');
chatStream.listen((data) => print('Chat message: $data'));

// Broadcast to channel
client.broadcast('chat:lobby', {'text': 'Hello!'});
Available extensions

Constructors

BloomRealtimeClient({required Uri uri, Duration initialReconnectDelay = const Duration(milliseconds: 500), Duration maxReconnectDelay = const Duration(seconds: 30), double backoffMultiplier = 1.5, bool autoReconnect = true, Duration pingInterval = const Duration(seconds: 30)})
Creates a BloomRealtimeClient targeting uri.

Properties

autoReconnect bool
Whether to automatically reconnect when the connection drops.
final
backoffMultiplier double
Exponential backoff multiplier applied on each failed reconnection.
final
hashCode int
The hash code for this object.
no setterinherited
initialReconnectDelay Duration
Initial reconnection delay before the first retry attempt.
final
isConnected bool
Whether the client is currently connected to the server.
no setter
maxReconnectDelay Duration
Maximum ceiling on reconnection delays.
final
onStateChanged Stream<RealtimeConnectionState>
Broadcast stream that emits whenever state changes.
no setter
pingInterval Duration
Interval at which ping keep-alive messages are sent.
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
state RealtimeConnectionState
Current connection state of the client.
no setter
uri Uri
Target WebSocket server endpoint URI.
final

Methods

broadcast(String channelName, Map<String, dynamic> payload) → void
Broadcasts a payload map to channelName from the client.
connect() Future<void>
Connects to the WebSocket server at uri.
dispose() → void
Disconnects the socket, cancels timers, closes stream controllers, and releases resources.
invalidateQueriesOnBroadcast({required String channel, required List key, bool filter(Map<String, dynamic> payload)?}) RealtimeQueryBridge

Available on BloomRealtimeClient, provided by the BloomRealtimeClientQueryBridgeExtension extension

Binds a realtime channel directly to a BloomData query key for automatic invalidation.
joinPresence(String channelName, Map<String, dynamic> userInfo) Stream<List<Map<String, dynamic>>>
Joins presence in channelName publishing userInfo metadata.
leavePresence(String channelName) → void
Leaves presence in channelName.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
subscribe(String channelName) Stream<Map<String, dynamic>>
Subscribes to channelName and returns a broadcast Stream of message payloads.
toString() String
A string representation of this object.
inherited
unsubscribe(String channelName) → void
Unsubscribes from channelName, closing its local broadcast controller.

Operators

operator ==(Object other) bool
The equality operator.
inherited