Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

dart

What is the StreamSubscription class in Dart?

Anusheh Zohair Mustafeez

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

When working with Streams in Dart, we need to decide actions in advance.

In order call a function every time a stream emits an event, we can use Dart’s StreamSubscription object. This object provides a listener for events and holds the callbacks used to handle them. It can also be used to unsubscribe from events or to temporarily pause the stream’s events.

To listen on a Stream, we can use the Stream.listen method. This method returns a StreamSubscription object. The template for the listen method is:

StreamSubscription<T> listen(void Function(T event) onData,
    {Function onError, void Function() onDone, bool cancelOnError});

The only required parameter for the method above is the function that’s called when the data arrives. The following example shows how listen() can be put to use:

StreamSubscription<int>  subscription = stream.listen(
  (data) { //this block is executed when data event is recieved by listener
    print('Data: $data');
  },
  onError: (err) { //this block is executed when error event is recieved by listener
    print('Error: ${err}');
  },
  cancelOnError: false, //this decides if subscription is cancelled on error or not
  onDone: () { //this block is executed when done event is recieved by listener
    print('Done!');
  },
);

Now that we know how to create a StreamSubscription object using the listen method, we can look into some useful methods the object has:

  • pause([Future<void>? resumeSignal]) → void: pauses events on a stream until further notice. The isPaused property can be used to check if a StreamSubscription is paused.
  • resume() → void: used to resume a paused stream subscription.
  • cancel() → Future<void>: cancels a subscription altogether. The stream subscription will not receive any events added to a stream after it is canceled.

To learn more about the StreamSubscription class, visit Dart’s official documentation here.

RELATED TAGS

dart

CONTRIBUTOR

Anusheh Zohair Mustafeez

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Keep Exploring