flutter_bloc/provider RepositoryProvider 与提供者
flutter_bloc/provider RepositoryProvider vs Provider
我是 Flutter 的新手,目前正在研究 DI。
我正在使用 flutter_bloc
和 provider
包。
flutter_bloc
附带 RepositoryProvider
,我现在问自己的问题是 Provider
与 provider
的区别是什么?
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)
– 这减少了冗长的差异
我是 Flutter 的新手,目前正在研究 DI。
我正在使用 flutter_bloc
和 provider
包。
flutter_bloc
附带 RepositoryProvider
,我现在问自己的问题是 Provider
与 provider
的区别是什么?
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)
– 这减少了冗长的差异