signaling<I extends Signal, O extends Signal> static method

Cell signaling<I extends Signal, O extends Signal>({
  1. required Cell bind,
  2. required O? transform(
    1. I signal,
    2. dynamic user
    ),
  3. dynamic user,
  4. Synapses<Signal, Cell> synapses = Synapses.enabled,
})

Creates a signaling Cell that transforms incoming and outgoing signals, or stop outgoing signals.

Parameters:

  • bind: Required Cell to bind to
  • transform: Transformation function for signals
  • user: Optional user data
  • synapses: Whether this cell can be linked (default: Linkable.enabled)

Returns a new Cell configured for signal transformation

Example: Transforming an int signal to String signal

// Create a value cell
final value = CollectiveValue<int>(0);

// Create a processor cell
final processor = Cell.signaling<Signal<int>, Signal<String>>(
  bind: value,
  transform: (signal, _) {

    // Check if the signal is less than 5
    if (signal.body < 5) {

      // If so, stop the signal
      return null;
    }

    // Transform the signal to a string
    return Signal<String>('Value is ${signal.body}');
  },
);

value.set(2); // This will stop the signal
value.set(6); // This will transform the signal to "6" as String

Implementation

static Cell signaling<I extends Signal, O extends Signal>({
  required Cell bind,
  required O? Function(I signal, dynamic user) transform,
  dynamic user,
  Synapses synapses = Synapses.enabled
}) {
  return CellSync(
    bind: bind,
    receptor: Receptor<Cell,I,O>(
        transform: ({required Cell cell, required I signal, dynamic user}) => transform(signal, user),
        user: user
    ),
    synapses: synapses == Synapses.enabled ? Synapses<O,Cell>() : synapses
  );
}