Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 什么';为我的Google Visualization API包装器提供可重用流的最佳方式是什么?_Events_Dart_Google Visualization_Dart Async_Dart Js Interop - Fatal编程技术网

Events 什么';为我的Google Visualization API包装器提供可重用流的最佳方式是什么?

Events 什么';为我的Google Visualization API包装器提供可重用流的最佳方式是什么?,events,dart,google-visualization,dart-async,dart-js-interop,Events,Dart,Google Visualization,Dart Async,Dart Js Interop,我正在开发一个基于Dart的包装器,可以在上查看。我为所有可用的图表创建了一个特定于图表的包装类 现在我正在研究底层类的事件。问题在于,在所有图表中,都有而不是共享的各种事件。因此,我需要找到一种方法,将特定的事件类型分配给相应的图表。我已经做的是: 我为api创建了一个包装器: 我创建了一个用于封装一个事件的所有代码的 class EventWrapper<E extends Event> { JsObject _jsChart; String _eventName;

我正在开发一个基于Dart的包装器,可以在上查看。我为所有可用的图表创建了一个特定于图表的包装类

现在我正在研究底层类的事件。问题在于,在所有图表中,都有而不是共享的各种事件。因此,我需要找到一种方法,将特定的事件类型分配给相应的图表。我已经做的是:

  • 我为api创建了一个包装器:

  • 我创建了一个用于封装一个事件的所有代码的

    class EventWrapper<E extends Event> {
      JsObject _jsChart;
      String _eventName;
      JsObject _handler;
      Stream<E> get onEvent => _streamController.stream;
      StreamController<E> _streamController;
      ...
      EventWrapper(this._jsChart, this._eventName, E reviver(p)) {
        _streamController = new StreamController.broadcast(onListen: () => _onListen(_eventName), onCancel: () => _onCancel(_eventName));
      }
    
      void _onListen(String event) {
        _handler = Events.addListener(_jsChart, event, ...);
      }
    
      void _onCancel(String event) {
        Events.removeListener(_handler);
      }
    }
    
    class PieChart ... {
      Stream<SelectEvent> get onSelect => _selectEventHandler.onEvent;
      EventWrapper _selectEventHandler;
    
      PieChart(Element e) : super._(e, "PieChart", vis) {
        _selectEventHandler = new EventWrapper<SelectEvent>(jsChart, 'select', (p) => new SelectEvent());
        // Other Events
      }
      // ...
    }
    
  • 为看到的每个事件组合创建基类,这将允许我共享最常见的代码。一些基类可能是:
    NoEvents
    SelectEvent
    SelectReadyEvents
    SelectReadyAnimationFinishEvents

  • 你们有谁有更好的解决办法吗?或者有人能告诉我如何解决我的问题吗?2已经是最好的解决方案了吗?因为我只需要组合几个方法,并且只有一点重复的代码

    class PieChart ... {
      Stream<SelectEvent> get onSelect => _selectEventHandler.onEvent;
      EventWrapper _selectEventHandler;
    
      PieChart(Element e) : super._(e, "PieChart", vis) {
        _selectEventHandler = new EventWrapper<SelectEvent>(jsChart, 'select', (p) => new SelectEvent());
        // Other Events
      }
      // ...
    }
    
    abstract class SelectEventMixin {
      Stream<SelectEvent> get onSelect => _selectEventHandler.stream;
      final StreamController _selectEventHandler = new StreamController.broadcast(onListen: _onListen);
    
      void _onListen() {
        // jsChart is available here
      }
    }