flutter_bloc/provider RepositoryProvider vs Provider

Cod*_*rit 2 flutter flutter-provider flutter-bloc

我是新手,目前正在研究 DI。
我正在使用flutter_blocprovider包装。

flutter_bloc附带一RepositoryProvider,问题IM问自己现在是什么之探源来Providerprovider

RepositoryProvider存储库有什么特别之处还是只是一种命名策略?

Rém*_*let 5

  • RepositoryProvider不处理更新。您不能在运行时“更改”存储库。
  • Provider确实处理更新(使用Provider.value)。这意味着如果您在运行时更改对象,则使用它的小部件将重建。

这种差异对生命周期的影响如下initState

使用Provider,您必须明确侦听对象更改:

void initState() {
  super.initState();
  // will fail if listen: false is not specified
  Provider.of<MyObject>(context, listen: false);
}
Run Code Online (Sandbox Code Playgroud)

使用RepositoryProvider,您不必关心:

void initState() {
  super.initState();
  RepositoryProvider.of<MyObject>(context);
}
Run Code Online (Sandbox Code Playgroud)

所以这只是详细程度的区别。

实际上,从Provider 版本 4.1.0 开始,您可以使用context.read<MyObject>()代替Provider.of<MyObject>(context, listen: false)– 这减少了冗长差异