LogoSignals.dart
Copy Markdown
rodydavis/signals.dart 999999

EventSinkSignalMixin

A mixin that implements the standard **EventSink** interface for a Signal.

A mixin that implements the standard EventSink interface for a Signal holding an AsyncState value.

This mixin is designed specifically to interface with Stream consumers or other asynchronous data producers. It maps add to AsyncState.data(...), addError to AsyncState.error(...), and close to disposing the signal.

This mixin only works with signals whose value is of type [AsyncState](/packages/signals/async/state).

Example Usage#

import 'package:signals/signals.dart';

class MyEventSinkSignal extends Signal<AsyncState<int>> with EventSinkSignalMixin<int> {
  MyEventSinkSignal(int initialValue) : super(AsyncState.data(initialValue));
}

void main() {
  final signal = MyEventSinkSignal(0);

  effect(() {
    final state = signal.value;
    state.map(
      data: (val) => print('Data received: $val'),
      error: (err, stack) => print('Error occurred: $err'),
      loading: () => print('Loading...'),
    );
  }); // Prints: "Data received: 0"

  // Treat it as an EventSink and add data
  signal.add(10); // Prints: "Data received: 10"

  // Push an error event
  signal.addError(Exception('Failure')); // Prints: "Error occurred: Exception: Failure"

  // Close/dispose the sink
  signal.close();
  print('Is disposed: ${signal.disposed}'); // Prints: "Is disposed: true"
}
Once **close** is called, the signal is disposed. Trying to call **add** or **addError** after closing will result in an exception.

Methods#

View Methods
void add(T event)
void addError(Object error, [StackTrace? stackTrace])
void close()