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++;
      });
  • 相关阅读:
    第七讲 宋词:婉约之曲与豪放之声
    P2024 食物链
    可以吹一年的事
    信息传递
    11.11模拟赛总结(又名斗地主战记)
    11.9模拟赛总结
    扩展欧几里得(exgcd模板)
    发糖果(拓扑排序模板)
    高斯消元
    关于我
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11454287.html
Copyright © 2011-2022 走看看