Как правильно вводить зависимости с помощью провайдера? - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю приложение и хочу использовать Provider в качестве моего инструмента для go DI.

Я хочу создать приложение со следующей архитектурой:

  • Представления
  • ViewModels
  • Службы

Представления - простые простые пользовательские интерфейсы, поддерживаемые моделями представления для (почти) каждого представления. И эти view-модели зависят от ценностей, которые удерживаются сервисами.

Видовые модели расширены с ChangeNotifierProvider, чтобы отразить изменения в пользовательском интерфейсе, и это работает хорошо. Но что я должен использовать, чтобы реагировать на изменения в услугах. Один сервис может использоваться в нескольких моделях просмотра, и, конечно, мне нужно поддерживать их все в актуальном состоянии.

Я просмотрел некоторые учебники, выкопанные в Архитектура Flutter Provider v3 с использованием ProxyProvider для инъекций , но это действительно не объясняет мне такого рода, или я не получаю Это.

ProxyProvider используется для других случаев там. Viewmodel делает запросы к службе, но ее значения потребляются непосредственно в пользовательском интерфейсе.

Как правильно установить соединение такого типа? Должен ли я использовать ChangeNotifierProxyProvider для такого случая? Должен ли я использовать потоки?

1 Ответ

0 голосов
/ 30 апреля 2020

Для использования ди, как вы говорите, есть ProxyProvider; ProxyProvider может быть как область приложения (объявлена ​​поверх виджета приложения, чтобы к нему можно было получить доступ из любого места в приложении, например, AuthService) или виджет (экран), например, область видимости, например, ваша ViewModel

. В этом примере A - это ViewModel из MyWidget и B - это Сервис Ps. Вы должны предоставить другому Провайдеру класс B поверх этой иерархии, чтобы ProxyProvider мог получить к нему доступ, чтобы «предоставить» классу A

ProxyProvider<B, A>(
        create: (_) => A(),
        update: (_, b, a) => a..bClassVariable = b,
        dispose: (_, a) => a.dispose(), //if you use streams
        child: MyWidget(

        ),
      )

По поводу вашего последнего ответа ответа нет), только вы должны решить, какой подход лучше для ваших потребностей, если вы знакомы с ViewVievModel, вы можете остаться с ним, или узнать что-то новое, как Blo C

Ps. Если вы используете ViewModel, ChangeNotifierProxyProvider будет работать нормально, а если вы используете blo c, то должны использоваться потоки

...