前言
关于Dart 语言的Stream 部分,应该回到语言本身去寻找答案,许多资料在Flutter框架中囫囵吞枣式的解释Stream
,总有一种让人云山雾罩的感觉,事实上从Dart语言本身去了解Stream
并不复杂,接下来就花点时间好好学习一下Stream吧!
Stream
和 Future
都是Dart中异步编程的核心内容,在之前的文章中已经详细叙述了关于Future
的知识,请查看 Dart 异步编程详解,本篇文章则主要基于 Dart2.5 介绍Stream
的知识。
什么是Stream
Stream
是Dart语言中的所谓异步数据序列的东西,简单理解,其实就是一个异步数据队列而已。我们知道队列的特点是先进先出的,Stream
也正是如此
在Dart语言中,
Stream
有两种类型,一种是点对点的单订阅流(Single-subscription),另一种则是广播流。
单订阅流
单订阅流的特点是只允许存在一个监听器,即使该监听器被取消后,也不允许再次注册监听器。
创建 Stream
创建一个Stream
有9个构造方法,其中一个是构造广播流的,这里主要看一下其中5个构造单订阅流的方法
periodic
void main(){
test();
}
test() async{
// 使用 periodic 创建流,第一个参数为间隔时间,第二个参数为回调函数
Stream<int> stream = Stream<int>.periodic(Duration(seconds: 1), callback);
// await for循环从流中读取
await for(var i in stream){
print(i);
}
}
// 可以在回调函数中对值进行处理,这里直接返回了
int callback(int value){
return value;
}
打印结果
0
1
2
3
4
...