创建扩展了InheritedWidget的Bloc Provider类之后,初始化Provider构造函数内部的bloc实例变量与在声明变量时对其进行初始化之间有什么区别?
class CommentsProvider extends InheritedWidget {
final CommentsBloc bloc;
CommentsProvider({Key key, Widget child})
: bloc = CommentsBloc(),
super(key: key, child: child);
}
class CommentsProvider extends InheritedWidget {
final CommentsBloc bloc = CommentsBloc();
CommentsProvider({Key key, Widget child})
: super(key: key, child: child);
}
答案 0 :(得分:0)
这两个是严格等效的,但是两个选项都不好。
您不应该不在 Inheritedwidget 内部创建变异数据。您可以轻松地松开状态,这被认为是不好的做法。
相反,请考虑将 Inheritedwidge 包装到 StatefulWidget 中,或使用诸如provider
之类的包。
使用provider
,您不再需要进行此类培训。相反,您可以直接执行以下操作:
Provider(
builder: (_) => CommentsBloc(),
dispose: (_, bloc) => bloc.dispose(),
child: Whatever(),
)