У меня проблема с реализацией приложения на 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. Итак, как правильно это сделать?
Спасибо за любую помощь!