Флаттер доля бл c между страницами - PullRequest
0 голосов
/ 25 марта 2020

У меня есть приложение-флаттер basi c с 2 страницами и 1 blo c.

  • На главной странице отображается список пользователей (только 2 атрибута)
  • При щелчке элемента пользователя на странице сведений отображаются все атрибуты

. Пользовательские данные выбираются с использованием блока blo c, который испускает 2 состояния

  • AllUsersLoadedState из api domain.com/users
  • UserLoadedState из api domain.com/users/id

Поскольку и домашняя страница, и страница сведений используют один и тот же блок blo c в своем BlocBuilder когда я перехожу на страницу сведений и нажимаю кнопку «Назад», происходит сбой домашней страницы.

Есть ли способ справиться с этим, не написав 2 отдельных блока c?

Ответы [ 2 ]

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

Я понял, в чем проблема. Поскольку на обеих страницах использовался один и тот же блок blo c, они перестраивали бы в обоих состояниях, в то время как домашняя страница должна была перестраивать только на AllUsersLoadedState, а страницу сведений перестраивать только на UserLoadedState.

Поэтому, когда я перехожу на страницу сведений, и UserLoadedState получен, домашняя страница не знает, как обрабатывать состояние, и может создать sh.

. Решение состоит в том, чтобы использовать параметр условия в конструкторе blo c для пропустить восстановление в нежелательном состоянии.

0 голосов
/ 27 марта 2020

Если вы хотите поделиться BLo C между экранами, то вы должны создать BLo C таким образом, чтобы он не был уничтожен, пока эти два экрана активны.

One способ сделать это - предоставить BLo C с использованием пакета Provider или InheritedWidget. Если вы используете Provider, то на каждом экране вы просто запрашиваете BLo C, используя Provider.of<MyBloc>(context). Вам нужно будет прочитать больше о Provider, чтобы узнать, как его использовать.

Другой способ - передать BLo C в качестве переменной конструктору вашего виджета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...