我已经用 c# 开发应用程序有一段时间了,并且对使用 Flutter SDK 感兴趣,以便将来可能切换到。我开始喜欢在 c# 中使用 EventHandlers 和委托来创建和触发自定义事件,并且我正在尝试在 Dart 中找到等价物。这样的事情可能吗?
谢谢!
import 'dart:async';
void main() {
var myClass = new MyClass();
var subscription = myClass.onMyEvent.listen((e) => print('new event: $e'));
myClass.emit(true);
myClass.emit(false);
subscription.cancel();
myClass.emit(null);
new MyDelegateExample()
..addHandler((val) => print('1: $val'))
..dispatch('a');
new MyDelegateExample2()
..addHandler((val) => print('2: $val'))
..dispatch('b');
}
Run Code Online (Sandbox Code Playgroud)
自定义事件
class MyClass {
final _onMyEvent = new StreamController<bool>.broadcast(sync: true);
Stream<bool> get onMyEvent => _onMyEvent.stream;
void emit(bool val) => _onMyEvent.add(val);
}
Run Code Online (Sandbox Code Playgroud)
具有内联类型的委托
class MyDelegateExample {
var _handlers = <void Function(String e)>[];
void addHandler(void Function(String e) handler) => _handlers.add(handler);
void dispatch(String x) => _handlers.forEach((h) => h(x));
}
Run Code Online (Sandbox Code Playgroud)
代表与 typedef
typedef void Handler(String e);
class MyDelegateExample2 {
var _handlers = <Handler>[];
void addHandler(Handler handler) => _handlers.add(handler);
void dispatch(String x) => _handlers.forEach((h) => h(x));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |