Steam 可以未来可以获取一个或多个值, 类似于水流的逻辑, 只要有水过来就会监听到; 同比 Future 只会在未来获取一个值.
final stream=Stream.periodic(const Duration(seconds: 1),(value)=>value);
void initState() {
super.initState();
future.then((value) => print(value));
stream.listen((event) {
print("stream:$event");
});
}
streamBuilder
场景: 将 Stream 流与 Widget 结合到一起的组件, 可实现组件的 局部数据更新
StreamBuilder(
builder:(context,snapshot){
print(snapshot.connectionState)
},
stream:streamFun()
)
snapshot.connectionState的状态
- waiting 等待中
- active 获取中
- none 没有数据流
- done 已完成
StreamController 监听更精确的数据流
import 'dart:async';
// 定义
final _controller = StreamController<int>();
// 关闭流
void dispose() {
super.dispose();
_controller.close();
}
// 获取流
streamBuilder(
stream:_controller(),
builder:(context,snapsht){
}
)
默认 StreamControoler 只能有一个监听者,如果出现多个监听可以用 StreamController.broadcast() 创建流
过滤流 stream
StreamBuilder(
stream:_controller.where((value){
return value > 2;
})
)