Flutter 颤振-使用依赖项注入时何时关闭流

Flutter 颤振-使用依赖项注入时何时关闭流,flutter,dart,dependency-injection,stream,bloc,Flutter,Dart,Dependency Injection,Stream,Bloc,如果我在MyWidget中实例化一个BLoC,我通常会使用StatefulWidget并在dispose方法中关闭流,如下所示: class _MyWidgetState extends State<MyWidget> { ... @override void initState() { // ... bloc = MyBloc() } @override void dispose() { bloc.stream.close();

如果我在MyWidget中实例化一个BLoC,我通常会使用
StatefulWidget
并在
dispose
方法中关闭流,如下所示:

class _MyWidgetState extends State<MyWidget> {
  ...
  @override
  void initState() {
    // ...
    bloc = MyBloc()
  }

  @override
  void dispose() {
    bloc.stream.close();
    // ...
  }
 ...
}
class\u MyWidgetState扩展状态{
...
@凌驾
void initState(){
// ...
bloc=MyBloc()
}
@凌驾
无效处置(){
bloc.stream.close();
// ...
}
...
}
但是,当我将提供的MyBloc实例注入MyWidget(可能通过MyWidget的构造函数)时,我关闭了widget层次结构更高的流,因为当用户离开或返回MyWidget时,MyWidget不会获得带有新流的MyBloc新实例

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;
    // ...
  }
}
类MyWidget扩展了StatefulWidget{
最后的MyBloc bloc;
MyWidget(this.bloc);
..
}
类_MyWidgetState扩展状态{
...
@凌驾
无效处置(){
//不再关闭这里的流了。关闭更高的流是因为
//当用户回到这里时,我没有得到一个新的实例;
// ...
}
}

这会导致内存泄漏吗?

这不是问题,只要创建对象的小部件在从小部件树中删除时正确处理它

事实上,子体应该而不是调用
dispose


这样做是一种反模式,因为后代不拥有其参数的所有权,因此不应该对其进行任何修改。

这不是问题,只要创建对象的小部件在从小部件树中删除时正确处理它

事实上,子体应该而不是调用
dispose

这样做是一种反模式,因为后代没有其参数的所有权,因此不应该对其进行任何修改