zoukankan      html  css  js  c++  java
  • [Dart] Capture and Handle Data Sequences with Streams in Dart

    Streams represent a sequence of asynchronous events. Each event is either a data event, also called an element of the stream, or an error event, which is a notification that something has failed. When a stream has emitted all its events, a single "done" event will notify the listener that the end has been reached. In this lesson, we will learn how we can capture and handle streaming data, working with various Stream classes.

      // Single Stream
      StreamController<String> controller = StreamController<String>();
      // Setup listener
      controller.stream.listen(
        (data) => print('Received data: ${data.toUpperCase()}'),
        onDone: () => print('done'),
        onError: (e) => print('error $e')
      );
      // Emit event
      controller.add('Hello');  
      controller.add('World');
      // trigger error
      controller.addError('Throwing this error');
      // trigger done
      await controller.close();
      print('after done, return future, clean up');
    // Broadcast Stream
      StreamController<String> controller2 = StreamController<String>();
      Stream<String> boradcast = controller2.stream.asBroadcastStream();
      
      boradcast.listen((data) => print('Received data: $data'));              
      boradcast.listen((data) => print('Received data again: $data'));
      
      controller2.add('Hello1');  
      controller2.add('World2');
     // Future-based streams
      Future<String> result = HttpRequest.getString('https://swapi.co/api/people/1');
      Stream<String> resultStream = Stream.fromFuture(result);
      resultStream.listen(
        (data) => print('Got data: $data'),
        onError: (e) => print(e.type),
        onDone: () => print('No more data on stream.')
      );
      
      // Future-based multi streams
      Future<String> result2 = HttpRequest.getString('https://swapi.co/api/people/2');
      Stream<String> peopleStream = Stream.fromFutures([result, result2]);
      peopleStream.listen(
        (person) => print('=> Got person: $person'),
            onDone: () => print('No more people on stream.')
      );
      // Typeahead
      List<String> chars = 'Dart is awesome'.split('');
      Stream<String> charStream = Stream.fromIterable(chars);
      var idx = 0;
      charStream.listen((char) {
        Timer(Duration(milliseconds: idx * 200), () => print(char));
        idx++;
      });
  • 相关阅读:
    P6057 [加油武汉]七步洗手法
    LC 1349. Maximum Students Taking Exam (Hungarian / Max Flow)
    P1879 [USACO06NOV]玉米田Corn Fields
    P1433 吃奶酪 (TSP)
    LC 1349. Maximum Students Taking Exam
    获取XML中的值
    TimeZoneInfo类的使用
    XML 克隆节点
    网络协议概述:物理层、连接层、网络层、传输层、应用层详解
    Vuex
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11454287.html
Copyright © 2011-2022 走看看