ReactiveSubject<T> class

A wrapper class for RxDart subjects that provides a simplified interface for reactive programming.

This class encapsulates either a BehaviorSubject or a PublishSubject and provides methods to interact with the underlying subject in a more convenient way.

Usage:

// Create a ReactiveSubject with an initial value
final subject = ReactiveSubject<int>(initialValue: 0);

// Add a value
subject.add(1);

// Listen to the stream
subject.stream.listen((value) => print(value));

// Get the current value
print(subject.value);

// Dispose when done
subject.dispose();

Usage with StreamBuilder in a widget:

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final ReactiveSubject<int> _counter = ReactiveSubject<int>(initialValue: 0);

  @override
  void dispose() {
    _counter.dispose();
    super.dispose();
  }

  void _incrementCounter() {
    _counter.add(_counter.value + 1);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: StreamBuilder<int>(
          stream: _counter.stream,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return Text('Counter: ${snapshot.data}');
            } else {
              return CircularProgressIndicator();
            }
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        child: Icon(Icons.add),
      ),
    );
  }
}

Constructors

ReactiveSubject({T? initialValue})
Creates a ReactiveSubject with a BehaviorSubject.
ReactiveSubject.broadcast({T? initialValue})
Creates a ReactiveSubject with a PublishSubject.

Properties

hashCode int
The hash code for this object.
no setterinherited
isClosed bool
Whether the underlying subject is closed.
no setter
isDisposed bool
Checks if the subject has been disposed
no setter
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
sink Sink<T>
The sink of the underlying subject.
no setter
stream Stream<T>
The stream of the underlying subject.
no setter
value → T
The current value of the subject.
no setter

Methods

add(T value) → void
Adds a new value to the subject with disposal check
addError(Object error, [StackTrace? stackTrace]) → void
Adds an error to the subject.
debounceTime(Duration duration) ReactiveSubject<T>
Emits items from the source ReactiveSubject only after a specified duration has passed without the ReactiveSubject emitting any other items.
dispose() Future<void>
Disposes the subject and prevents further usage
distinct([bool equals(T previous, T next)?]) ReactiveSubject<T>
Emits all items emitted by the source ReactiveSubject that are distinct from their immediate predecessors.
doOnData(void onData(T event)) ReactiveSubject<T>
Performs a side-effect action for each data event emitted by the source ReactiveSubject.
doOnError(void onError(Object error, StackTrace stackTrace)) ReactiveSubject<T>
Performs a side-effect action for each error event emitted by the source ReactiveSubject.
map<R>(R mapper(T event)) ReactiveSubject<R>
Transforms the items emitted by the source ReactiveSubject by applying a function to each item.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
scan<R>(R initialValue, R accumulator(R accumulated, T current, int index)) ReactiveSubject<R>
Applies an accumulator function over the source ReactiveSubject, and returns each intermediate result as a ReactiveSubject.
startWith(T startValue) ReactiveSubject<T>
Prepends a given value to the source ReactiveSubject.
switchMap<R>(ReactiveSubject<R> mapper(T event)) ReactiveSubject<R>
Transforms the items emitted by the source ReactiveSubject by applying a function that returns a ReactiveSubject, then emitting the items emitted by the most recently created ReactiveSubject.
throttleTime(Duration duration) ReactiveSubject<T>
Emits the first item emitted by the source ReactiveSubject in each time window of a specified duration.
toString() String
A string representation of this object.
inherited
where(bool test(T event)) ReactiveSubject<T>
Filters the items emitted by the source ReactiveSubject by only emitting those that satisfy a specified predicate.
withLatestFrom<S, R>(ReactiveSubject<S> other, R combiner(T event, S latestFromOther)) ReactiveSubject<R>
Combines the latest values of two ReactiveSubjects using a specified combiner function.

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Methods

combineLatest<T>(List<ReactiveSubject<T>> subjects) ReactiveSubject<List<T>>
Combines the latest values of multiple ReactiveSubjects into a single ReactiveSubject that emits a List of those values.
fromFutureWithError<T>(Future<T> future, {dynamic onError(Object error)?, dynamic onFinally()?, Duration? timeout}) ReactiveSubject<T>
Creates a ReactiveSubject from a Future, with error handling and completion callback.
merge<T>(List<ReactiveSubject<T>> subjects) ReactiveSubject<T>
Merges multiple ReactiveSubjects into a single ReactiveSubject.