presence method

ReadonlySignal<List<Map<String, dynamic>>> presence(
  1. String channelName, {
  2. Map<String, dynamic> userInfo = const {},
})

Returns a ReadonlySignal tracking the active presence list on channelName.

Starts as an empty list and updates whenever users join, leave, or broadcast presence updates. userInfo is the metadata published on behalf of this client upon joining. Repeated calls with the same channelName return the cached signal.

final activeUsers = binding.presence('room:123', userInfo: {'name': 'Alice'});

Implementation

ReadonlySignal<List<Map<String, dynamic>>> presence(
  String channelName, {
  Map<String, dynamic> userInfo = const {},
}) {
  if (_presenceSignals.containsKey(channelName)) {
    return _presenceSignals[channelName]!.readonly();
  }
  final sig = signal<List<Map<String, dynamic>>>(const []);
  _presenceSignals[channelName] = sig;
  _subs.add(client
      .joinPresence(channelName, userInfo)
      .listen((users) => sig.value = users));
  return sig.readonly();
}