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 = ;
charStream.listen((char) {
Timer(Duration(milliseconds: idx * ), () => print(char));
idx++;
});

最新文章

  1. Android 手机卫士--导航界面1的布局编写
  2. js快捷输入日期
  3. LINQ for XML简单示例
  4. μC/OS-Ⅲ中的临界段代码
  5. BZOJ 1004: [HNOI2008]Cards
  6. Valid Sudoku leetcode
  7. Git常用操作命令与图解
  8. paip.提升稳定性---c3p0数据库连接池不能取到连接An attempt by a client to checkout a Connection has timed out
  9. hdu 1261 字串数
  10. 低调的华丽,Windows Server 2003 ... 写给厌倦了XP,但又纠结于vista/win7花哨的童鞋(转)
  11. C#高级知识点概要(2) - 线程和并发
  12. Altium Designer /DXP无网络铺铜:
  13. arcgis 绝对、相对、UNC 和 URL
  14. [Leetcode][001] Two Sum (Java)
  15. Python获取并输出当前日期时间
  16. 过度拟合(overfilting)
  17. 20155208 徐子涵 Exp3 免杀原理与实践
  18. 【亲测显式等待】Selenium:元素等待的4种方法
  19. ssm 整合 redis(进阶教程)
  20. C/C++基础----随机数分布和随机数引擎

热门文章

  1. CTeX 更改字体(软件)
  2. Linux基础-15-samba服务
  3. python学习-41 装饰器 -- 高阶函数
  4. PAT甲级题分类汇编——排序
  5. Kubernetes 学习笔记(二):本地部署一个 kubernetes 集群
  6. MacBook Pro 安装composer及Yii2.0
  7. webstrom设置语句中的分号
  8. kvm第三章--虚拟化存储管理
  9. STM8 定时器
  10. String.getBytes()方法中的中文编码问题