Я использую пакет flutter_bloc (https://felangel.github.io/bloc/#/gettingstarted), который был потрясающим. В настоящее время у меня есть блок авторизации, который содержит маркер доступа, когда пользователь вошел в систему.
На многихмои HTTP-запросы, мне нужно отправить токен доступа на свой бэкэнд.
Я создаю многоразовую функцию для обработки всех защищенных HTTP-запросов, для которых требуется отправка токена доступа. Это можно использовать повторнопоэтому мне не нужно постоянно передавать маркер доступа из уровня пользовательского интерфейса в уровень API, однако я не уверен, как получить доступ к блоку аутентификации из этой функции, поскольку он отсутствует в дереве виджетов
Данные передаются следующим образом, когда я делаю HTTP-запрос (на основе учебных пособий felangel flutter bloc):
UI -> bloc -> repository -> api
and then:
api -> repository -> bloc -> UI
У меня есть BlocProvider в верхней части моего приложения для предоставления AuthBloc, например:
return BlocProvider(
builder: (BuildContext context) =>
AuthBloc(authRepository: authRepository),
child: Scaffold(
...
А вот моя функция многократного использования для защищенных запросов. Мне нужно получить доступ к блоку аутентификации в этой функции, но я не совсем уверен, как это сделать.
Future<dynamic> protectedRequest(
{accessToken, endpoint, dynamic body}) async {
final uri = Uri.https(baseUrl, endpoint);
final response = await http.post(uri,
body: body, headers: {'Authorization': 'Bearer ' + accessToken});
if (response.statusCode == 200 || response.statusCode == 201) {
return response;
} else {
throw Exception();
}
}
Спасибо