我有以下课程:
class EventableNumber{
num _val;
num get val => _val;
void set val(num v){
num oldValue = _val;
_val = v;
_controller.add(new NumberChangedEvent(oldValue, v));
}
StreamController<NumberChangedEvent> _controller = new StreamController<NumberChangedEvent>();
Stream<NumberChangedEvent> _stream;
Stream<NumberChangedEvent> get onChange => (_stream != null) ? _stream : _stream = _controller.stream.asBroadcastStream();
EventableNumber([num this._val = 0]);
}
是否可以重载=
赋值运算符?而不是使用val
getter和setter来强制事件在值发生变化时触发,如果只是在用户写入myEventableNum = 34
然后myEventableNum
首先执行时才会这样做会很好onChange
事件,而不是myEventableNum.val = 34
。
答案 0 :(得分:6)
Dart不允许这样做。
但是,您考虑过函数样式调用吗?
基本上,如果在EventableNumber类中定义一个名为“call”的函数,那么可以将该实例作为函数调用:
myEventableNum(34)
如果你决定采用这种方式,建议实现Function接口:
class EventableNumber implements Function {
...
void call(val) {...}
...
}
希望这会有所帮助:)