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++;
      });
  • 相关阅读:
    SA (后缀数组) 学习笔记
    loj2318 「NOIP2017」宝藏[状压DP]
    hdu4352 XHXJ's LIS[数位DP套状压DP+LIS$O(nlogn)$]
    【鸽】poj3311 Hie with the Pie[状压DP+Floyd]
    P1879 [USACO06NOV]玉米田Corn Fields[轮廓线DP]
    hdu4507 吉哥系列故事——恨7不成妻[数位DP]
    BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]
    poj1015 Jury Compromise[背包]
    hdu3586 Information Disturbing[二分答案+树形DP]
    BZOJ4247 挂饰[背包]
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11454287.html
Copyright © 2011-2022 走看看