Flutter - 使用依赖注入时何时关闭流
Posted
技术标签:
【中文标题】Flutter - 使用依赖注入时何时关闭流【英文标题】:Flutter - When to close streams when using dependency injection 【发布时间】: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;
// ...
这会导致内存泄漏吗?
【问题讨论】:
【参考方案1】:这不是问题,只要创建对象的小部件在从小部件树中移除时正确处置它。
事实上,后代应该不在他们的参数上调用dispose
。
这样做是一种反模式,因为后代不拥有其参数的所有权,因此不应对其进行任何修改。
【讨论】:
以上是关于Flutter - 使用依赖注入时何时关闭流的主要内容,如果未能解决你的问题,请参考以下文章
当 API 关闭时,Xamarin 表单依赖注入 HttpClient 超时不起作用
如何通过使用flutter bloc从fire存储中使用依赖注入来处理错误`The getter was called on null`