У меня есть следующий код
import 'dart:async';
import 'dart:html';
import 'package:angular/angular.dart';
@Component(
selector: 'my-screen',
directives: [coreDirectives, ],
templateUrl: 'my_component.html',
)
class MyComponent implements OnInit, OnDestroy {
Stream periodicStream;
StreamSubscription periodicSubs;
MyBloc myBloc;
myComponent(this.myBloc) : super() {
myBloc.listen((newState){
if (newState is SomeBlocState) {
periodicStream = new Stream.periodic(new Duration(seconds: 1));
periodicSubs = periodicStream.listen(this.onTick);
}
});
}
void onTick(dynamic) {
print('onTick');
}
@override
void ngOnInit() {
}
@override
void ngOnDestroy() {
print('ngOnDestroy');
if (periodicSubs != null) {
print('periodicSubs.cancel()');
periodicSubs.cancel();
periodicSubs = null;
periodicStream = null;
}
}
}
Основная проблема:
1) когда компонент создается в первый раз, все выглядит нормально, у меня есть консольные сообщения 'onTick' и после уничтожения компонента (вызванного ngOnDestroy) эти сообщения исчезают
2), но когда компонент создается во второй раз (и т. д.) и периодический поток c снова инициализируется, я получаю двойной 'onTick' Сообщения в журнале консоли, которые выглядят так, как будто предыдущий поток стал живым
Что может вызвать такое поведение?