flutter_bloc/provider RepositoryProvider 与提供者

flutter_bloc/provider RepositoryProvider vs Provider

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

flutter_bloc 附带 RepositoryProvider,我现在问自己的问题是 Providerprovider 的区别是什么?

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

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

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

使用Provider,您必须明确监听对象变化:

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

使用RepositoryProvider,你不用关心:

void initState() {
  super.initState();
  RepositoryProvider.of<MyObject>(context);
}

所以这只是冗长程度的不同。

事实上,由于 Provider version 4.1.0,您可以使用 context.read<MyObject>() 而不是 Provider.of<MyObject>(context, listen: false) – 这减少了冗长的差异