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.