Если я создаю экземпляр BLoC в MyWidget, я обычно использую StatefulWidget
и закрываю поток в методе dispose
следующим образом:
class _MyWidgetState extends State<MyWidget> {
...
@override
void initState() {
// ...
bloc = MyBloc()
}
@override
void dispose() {
bloc.stream.close();
// ...
}
...
}
Однако, когда я внедряю предоставленный экземплярMyBloc в MyWidget (возможно, через конструктор MyWidget), я закрываю поток выше по иерархии виджетов, поскольку MyWidget не получает новый экземпляр MyBloc с новым потоком, когда пользователь переходит от MyWidget и обратно к нему .
class MyWidget extends StatefulWidget {
final MyBloc bloc;
MyWidget(this.bloc) ... ;
..
}
class _MyWidgetState extends State<MyWidget> {
...
@override
void dispose() {
// Not closing stream here anymore. Closing higher up because
// I don't get a fresh instance when user comes back here;
// ...
}
}
Это вызывает утечку памяти?