我基本上都知道如何使用它们; 例如收听元素的onclick流。
但是,你如何建立自己的俱乐部?
我基本上都知道如何使用它们; 例如收听元素的onclick流。
但是,你如何建立自己的俱乐部?
下面是一个完整的工作示例:
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();
你也可以做很酷的事情像检查是否有与用户controller.hasListener
或者你可以发出一个错误信号 。 一定要检查的API文档StreamController
。
您可以使用new StreamController.broadcast()
允许多个监听器。
这里有一个简单的方法来创建(用于复制pasters大片段)流:
class Something {
StreamController _onExitController = new StreamController.broadcast();
Stream get onExit => _onExitController.stream;
}
然后,类可以只访问_onExitController
以控制流(对于实施例.add()
我刚刚创建了一个新的飞镖库调用event_stream使你的类创建自定义的事件更容易。 下面是一个例子:
class ClassWithEvents implements NotifyPropertyChanged {
String _someProperty;
final EventStream<PropertyChangedEventArgs> _onPropertyChangedEvent = new EventStream<PropertyChangedEventArgs>();
Stream<PropertyChangedEventArgs> get onPropertyChanged => _onPropertyChangedEvent.stream;
final EventStream _onClosedEvent = new EventStream();
Stream get onClosed => _onClosedEvent.stream;
String get someProperty => _someProperty;
set someProperty(String value) {
_onPropertyChangedEvent.signal(new PropertyChangedEventArgs('someProperty', value));
_someProperty = value;
}
close() {
_onClosedEvent.signal();
}
}
main() {
var c = new ClassWithEvents();
c.onPropertyChanged.listen((PropertyChangedEventArgs<String> args) => print('changed: name=${args.propertyName} value=${args.value}'));
c.onClosed.listen((_) => print('closed'));
c.someProperty = "test";
c.close();
}
除了StreamController
你可以实例化一个Stream
以其命名的构造函数的一个直接:
Stream.fromFuture()
返回触发一个事件流(不管'未来”完成对。)
Stream.fromIterable()
返回转换流Iterable
元素的事件的序列。
Stream.periodic()
返回周期性触发一个事件计算一个流。
这是非常方便的,你可以写预计消费流的代码,但是你有多种选择,以怎样的事件喂的那类。 例如: Stream.fromIterable()
可以以一个单元测试被用于触发事件的已知序列,否则通常会被馈送从文件中读取数据的事件的类。