- RepositoryProvider не обрабатывает обновления. Вы не можете «изменить» хранилище во время выполнения.
- Поставщик обрабатывает обновления (используя
Provider.value
). Это означает, что если вы измените объект во время выполнения, то виджеты, которые его используют, будут перестроены.
Влияние этой разницы на жизненные циклы, такие как initState
:
Использование Провайдер , вы должны явно не прослушивать изменения объекта:
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
очень скоро будет иметь расширения на BuildContext
, так что тот же самый Provider.of<MyObject>(context, listen: false)
будет стать: context.read<MyObject>()
- что уменьшает разницу