在提供者构造函数中初始化bloc与初始化bloc实例变量的内联声明

时间:2019-05-30 19:18:33

标签: flutter dart bloc

创建扩展了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);
}

1 个答案:

答案 0 :(得分:0)

这两个是严格等效的,但是两个选项都不好。

您不应该 Inheritedwidget 内部创建变异数据。您可以轻松地松开状态,这被认为是不好的做法。

相反,请考虑将 Inheritedwidge 包装到 StatefulWidget 中,或使用诸如provider之类的包。

使用provider,您不再需要进行此类培训。相反,您可以直接执行以下操作:

Provider(
  builder: (_) => CommentsBloc(),
  dispose: (_, bloc) => bloc.dispose(),
  child: Whatever(),
)