flutter_bloc / provider RepositoryProvider与提供者

时间:2020-02-06 09:34:43

标签: flutter flutter-provider flutter-bloc

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

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

RepositoryProvider存储库有什么特别之处吗?还是仅仅是命名策略?

1 个答案:

答案 0 :(得分:4)

  • 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) –这样可以减少冗长的差异