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++;
      });
  • 相关阅读:
    Android Permission 访问权限大全(转)
    .NET中DateTime.Now.ToString的格式化字符串
    linux
    code only
    常用JavaScript操作页面元素的方法
    C#将字符串数组转换为以逗号分隔的字符串
    C#去除数组空格
    追源索骥:透过源码看懂Flink核心框架的执行流程
    高并发请求的缓存设计策略
    spark 2.3 导致driver OOM的一个SparkPlanGraphWrapper源码的bug
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11454287.html
Copyright © 2011-2022 走看看