Глобальная зависимость от flutter_bloc - PullRequest
0 голосов
/ 12 апреля 2020

У меня проблема с реализацией приложения на Flutter с использованием flutter_blo c. Я понял основные понятия, но нашел «крайний случай», в котором нет примеров или руководств (по крайней мере, которые я мог бы найти):

(я упросту проблему) У меня есть блок blo c, который называется AuthBloc, который управляет App. Если состояние NotAuthenticated, то приложение должно показывать LoginScreen, а если Authenticated, приложение должно показывать HomeScreen. Внутри HomeScreen у меня есть 4 блока, где каждый блок c имеет свои состояния и события, но все они имеют зависимости от различных Repositories для получения некоторых данных из API.

Все Repositories нужен токен для выполнения запросов API. Первая проблема пришла сюда. Как я могу получить токен из всех репозиториев? Если я использую UserRepository для хранения токена, мне нужно будет передать его как зависимость каждому репозиторию (возможно, это работает, но я не думаю, что это правильный способ сделать это). Итак, что может быть правильным способом управления этим?

Вторая проблема:

Если каким-то образом я могу получить токен на все запросы к репозиториям, что произойдет, если токен будет отозван? Приложение должно вернуться к LoginScreen, и для этого мне нужно будет уведомить AuthBloc через событие (например, InvalidTokenEvent). И AuthBloc должен изменить свое состояние на NotAuthenticated, и это восстановит LoginScreen. Но вопрос: как я могу уведомить AuthBloc из других блоков или репозиториев? Первая идея, которая у меня возникла, - это внедрение зависимостей: я могу передать AuthBlo c каждому другому blo c в конструкторе, поэтому, когда запрос репозитория возвращает токен с истекшим сроком действия, XBloc может вызвать AuthBloc.add(InvalidTokenEvent). Но опять же, если у меня много блоков, мне нужно было бы делать это в каждом блоке c. Итак, как правильно это сделать?

Спасибо за любую помощь!

...