Kai*_*ren 40
这是一个完整的工作示例:
import 'dart:async';
import 'dart:io';
class Application {
Stream onExit;
Application() {
// Create a stream controller and assign its stream to "onExit".
var controller = new StreamController();
onExit = controller.stream;
// Create some class that uses our stream.
new UserOfStream(this);
// Whenever we exit the application, notify everyone about it first.
controller.add('we are shutting down!');
exit(0);
}
}
class UserOfStream {
UserOfStream(app) {
app.onExit.listen((String message) => print(message));
}
}
main() => new Application();
Run Code Online (Sandbox Code Playgroud)
您还可以执行很酷的操作,例如检查是否有订阅者,controller.hasListener或者您可以发出错误信号.请务必查看API文档StreamController.
您可以使用new StreamController.broadcast()允许多个侦听器.
这是创建流的简单方法(复制贴纸的优秀代码段):
class Something {
StreamController _onExitController = new StreamController.broadcast();
Stream get onExit => _onExitController.stream;
}
Run Code Online (Sandbox Code Playgroud)
然后类可以只访问_onExitController控制流(例如.add()).
此外,StreamController您可以Stream直接使用其命名构造函数之一实例化 a :
Stream.fromFuture()返回触发一个事件的流(无论Future完成的是什么。)
Stream.fromIterable()返回将Iterable元素转换为事件序列的流。
Stream.periodic() 返回一个定期触发计算事件的流。
这非常方便,因为您可以编写期望使用流的代码,但是您有多种选择如何将事件提供给该类。例如:Stream.fromIterable() 可以在单元测试中用于将已知的事件序列触发到一个类,否则通常会从文件中读取数据事件。
| 归档时间: |
|
| 查看次数: |
8702 次 |
| 最近记录: |