flutter_bloc / provider RepositoryProvider против провайдера - PullRequest
0 голосов
/ 06 февраля 2020

Я новичок в трепетании и в настоящее время выясняю DI. Я использую пакеты flutter_bloc и provider.

flutter_bloc поставляется с RepositoryProvider, вопрос, который я сейчас задаю себе, - это разница с Provider от provider?

Есть ли что-то особенное для RepositoryProvider репозиториев или это просто стратегия именования?

1 Ответ

1 голос
/ 06 февраля 2020
  • 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>() - что уменьшает разницу

...