Intermediate Dart
  • Welcome to the Course
  • Course Overview
  • Resources
  • Dart Fundamentals-2
    • Section Overview
    • Basic Concepts
      • Class
      • Object/Instance
      • Instance /Field Variables
      • Methods
      • "this" keyword-1
    • Constructor
      • Default Constructor
      • Parameterised Constructor
        • Basic Parameterised Constructor & "this" keyword -2
        • Parameterised Constructor with Syntactic sugar
        • Optional Arguments in Parameterised Constructor
      • Named Constructor
    • Getters & Setters and Encapsulation
      • Access Modifiers and _ symbol
      • Implicit / Default Getters & Setters
      • Custom Getters and Setters
      • Encapsulation
    • Inheritance
      • Inheritance, Types of Inheritance , Terminology
      • Method Overriding
      • @override annotation
      • super Keyword -1
      • super Keyword -2
    • Polymorphism
    • Static Variables and Methods
    • Abstract Class and Abstract Methods
    • Interface
    • Miscellaneous concepts
      • Untitled
      • Object Class
      • Mixin
      • Immutable Instances
      • Cascade notation
  • Dart Fundamentals -3
    • Section Overview
    • Asynchronous Programming
      • Basic Concept of Asynchronous programming
      • async , await , then
      • Exception Handling in asynchronous code
    • Functional Programming
      • Anonymous functions
      • High Level Iterators
    • Advanced Asynchronous Programming
      • Isolates
      • Streams
      • Generators
      • Microtask and Zones
    • Method & Constructor Overloading
Powered by GitBook
On this page
  • Basics of Streams
  • Types of Stream
  • Error Handling in Stream
  • Manipulating Streams
  • Creating Streams

Was this helpful?

  1. Dart Fundamentals -3
  2. Advanced Asynchronous Programming

Streams

PreviousIsolatesNextGenerators

Last updated 4 years ago

Was this helpful?

Basics of Streams

import 'dart:async';

void main() {
  // Streams
  var numberStream = NumberGenerator().stream;

  numberStream.listen((data) {
    print(data);
  });
}

class NumberGenerator {
  NumberGenerator() {
    Timer.periodic(Duration(seconds: 1), (t) {
      controller.sink.add(count);

      count++;
    });
  }

  var count = 1;

  final controller = StreamController<int>();

  Stream<int> get stream => controller.stream;
}


Stream emits an asynchronous sequence of data.

Types of Stream

There are two types of streams in dart :-

// This will show an error
import 'dart:async';

void main() {
  // Streams
  var numberStream = NumberGenerator().stream;

  final subscription1 = numberStream.listen((data) {
    print(data);
  });

  final subscription2 = numberStream.listen((data) {
    print(data);
  });
}

class NumberGenerator {
  NumberGenerator() {
    Timer.periodic(Duration(seconds: 1), (t) {
      controller.sink.add(count);

      count++;
    });
  }

  var count = 1;

  final controller = StreamController<int>();

  Stream<int> get stream => controller.stream;
}


import 'dart:async';

void main() {
  // Streams
  var numberStream = NumberGenerator().stream.asBroadcastStream();

  final subscription1 = numberStream.listen((data) {
    print(data);
  });

  final subscription2 = numberStream.listen((data) {
    print(data);
  });
}

class NumberGenerator {
  NumberGenerator() {
    Timer.periodic(Duration(seconds: 1), (t) {
      controller.sink.add(count);

      count++;
    });
  }

  var count = 1;

  final controller = StreamController<int>();

  Stream<int> get stream => controller.stream;
}

Error Handling in Stream

import 'dart:async';

void main() {
  // Streams
  var numberStream = NumberGenerator().stream;

  final subscription1 = numberStream.listen((data) {
    print(data);
  }, onError: (err) {
    //logic for error handling
    print("$err, Error detected !");
  }, cancelOnError: true);
}

class NumberGenerator {
  NumberGenerator() {
    Timer.periodic(Duration(seconds: 1), (t) {
      if (count == 5) {
        controller.sink.addError("Error !!!!");
      }
      controller.sink.add(count);

      count++;
    });
  }

  var count = 1;

  final controller = StreamController<int>();

  Stream<int> get stream => controller.stream;
}

Manipulating Streams

import 'dart:async';

void main() {
  // Streams
  var numberStream = NumberGenerator().stream;

  final subscription1 =
      numberStream.map((i) => i * 3).where((i) => i % 2 == 0).listen((data) {
    print(data);
  });
}

class NumberGenerator {
  NumberGenerator() {
    Timer.periodic(Duration(seconds: 1), (t) {
      controller.sink.add(count);

      count++;
    });
  }

  var count = 1;

  final controller = StreamController<int>();

  Stream<int> get stream => controller.stream;
}

Creating Streams

If you want to explore more about Streams : -

Asynchronous programming: Streamsdart_lang
Stream class - dart:async library - Dart API
Logo
Logo