我是新手,目前正在研究DI。
我正在使用flutter_bloc
和provider
软件包。
flutter_bloc
附带了RepositoryProvider
,我现在问自己的问题是Provider
与provider
的区别是什么?
RepositoryProvider
存储库有什么特别之处吗?还是仅仅是命名策略?
答案 0 :(得分:4)
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)
–这样可以减少冗长的差异