Flutter 颤振-使用依赖项注入时何时关闭流
如果我在MyWidget中实例化一个BLoC,我通常会使用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();
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
这样做是一种反模式,因为后代没有其参数的所有权,因此不应该对其进行任何修改