listen method

StreamSubscription<T> listen(
  1. void onData(
    1. T event
    )?, {
  2. Function? onError,
  3. void onDone()?,
  4. bool? cancelOnError,
  5. bool immediately = false,
})

Listens to changes in this reactive value.

Parameters:

  • onData: Callback for each new value
  • onError: Optional error callback
  • onDone: Optional completion callback
  • cancelOnError: Whether to cancel on error
  • immediately: Whether to call onData with current value immediately

Returns: A StreamSubscription for cancellation

Example:

final counter = Signal(0);
final sub = counter.listen(
  (value) => print('Counter: $value'),
  immediately: true,
);
sub.cancel();

Implementation

StreamSubscription<T> listen(
  void Function(T event)? onData, {
  Function? onError,
  void Function()? onDone,
  bool? cancelOnError,
  bool immediately = false,
}) {
  assert(() {
    if (this is ReadableNode) {
      return !(this as ReadableNode).isDisposed;
    }
    return true;
  }(), "$runtimeType is disposed");

  final controller = JoltStreamHelper.getOrCreateStreamController(this);

  if (immediately) {
    Future.microtask(() => onData?.call(value));
  }
  return controller.stream.listen(onData,
      onError: onError, onDone: onDone, cancelOnError: cancelOnError);
}