相当于Dash中的c#EventHandler?

问题描述 投票:0回答:1

我已经在c#中开发了一个应用程序已经有一段时间了,我有兴趣使用Flutter SDK将来可能切换到。我喜欢在c#中使用EventHandlers和delegates来创建和触发自定义事件,并试图在Dart中找到一个等价物。这样的事情可能吗?

谢谢!

dart flutter
1个回答
4
投票
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');
}

自定义事件

class MyClass {
  final _onMyEvent = new StreamController<bool>.broadcast(sync: true);

  Stream<bool> get onMyEvent => _onMyEvent.stream;

  void emit(bool val) => _onMyEvent.add(val);
}

内联类型的代表

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));
}

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));
}
© www.soinside.com 2019 - 2024. All rights reserved.