前言

关于Dart 语言的Stream 部分,应该回到语言本身去寻找答案,许多资料在Flutter框架中囫囵吞枣式的解释Stream,总有一种让人云山雾罩的感觉,事实上从Dart语言本身去了解Stream并不复杂,接下来就花点时间好好学习一下Stream吧!

StreamFuture都是Dart中异步编程的核心内容,在之前的文章中已经详细叙述了关于Future的知识,请查看 Dart 异步编程详解,本篇文章则主要基于 Dart2.5 介绍Stream的知识。

什么是Stream

Stream是Dart语言中的所谓异步数据序列的东西,简单理解,其实就是一个异步数据队列而已。我们知道队列的特点是先进先出的,Stream也正是如此

在Dart语言中,Stream有两种类型,一种是点对点的单订阅流(Single-subscription),另一种则是广播流。

单订阅流

单订阅流的特点是只允许存在一个监听器,即使该监听器被取消后,也不允许再次注册监听器。

创建 Stream

创建一个Stream有9个构造方法,其中一个是构造广播流的,这里主要看一下其中5个构造单订阅流的方法

periodic

  1. void main(){
  2. test();
  3. }
  4. test() async{
  5. // 使用 periodic 创建流,第一个参数为间隔时间,第二个参数为回调函数
  6. Stream<int> stream = Stream<int>.periodic(Duration(seconds: 1), callback);
  7. // await for循环从流中读取
  8. await for(var i in stream){
  9. print(i);
  10. }
  11. }
  12. // 可以在回调函数中对值进行处理,这里直接返回了
  13. int callback(int value){
  14. return value;
  15. }

打印结果

  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
  6. ...