在m4更新後,StreamController.broadcast()被移除,我發現asBroadcastStream不能被多次調用。這意味着你必須存儲流,就像在Ugly類中一樣,而不是像Pretty類那樣只使用getter。asBroadcastStream不能被多次調用
這是設計,還是我做錯了?
void main() {
Pretty p = new Pretty();
//This does not work.
p.onChange.listen((n) => print(n));
//This second call throws: "Bad state: Stream already has subscriber". Why?
p.onChange.listen((n) => print(n));
//This does work.
Ugly u = new Ugly();
u.onChange.listen((n) => print(n));
u.onChange.listen((n) => print(n));
}
class Pretty{
StreamController<int> _streamCtrl = new StreamController<int>();
Stream<int> get onChange => _streamCtrl.stream.asBroadcastStream();
}
class Ugly{
StreamController<int> _streamCtrl = new StreamController<int>();
Stream<int> _onChange;
Stream<int> get onChange => _onChange;
Ugly(){
_onChange = _streamCtrl.stream.asBroadcastStream();
}
}
我猜這是鏢1.0的呢?我想我在某處讀到M4核心庫被認爲是穩定的,所以我們現在「堅持」了這一點?我絕對可以忍受這個醜陋的解決方案,但是那個漂亮的解決方案實在太棒了。 :D –
我們仍然可以做不間斷的更改。 –