【问题标题】:Flutter - When to close streams when using dependency injectionFlutter - 使用依赖注入时何时关闭流
【发布时间】:2020-01-21 09:46:01
【问题描述】:

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

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

  @override
  void dispose() {
    bloc.stream.close();
    // ...
  }
 ...
}

但是,当我将提供的 MyBloc 实例注入 MyWidget 时(可能通过 MyWidget 的构造函数),我关闭了小部件层次结构更高的流,因为 MyWidget 在用户导航离开和返回 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;
    // ...
  }
}

这会导致内存泄漏吗?

【问题讨论】:

    标签: flutter dart dependency-injection stream bloc


    【解决方案1】:

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

    事实上,后代应该在他们的参数上调用dispose

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

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 2010-12-07
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多