// Package imports: import 'package:curl_logger_dio_interceptor/curl_logger_dio_interceptor.dart'; import 'package:dio/dio.dart'; import 'package:dio_smart_retry/dio_smart_retry.dart'; import 'package:pretty_dio_logger/pretty_dio_logger.dart'; // Project imports: import '../../components/env.dart'; /// /// Обработчик на события для авторизации /// InterceptorsWrapper get _auth { return InterceptorsWrapper( onRequest: ( RequestOptions options, RequestInterceptorHandler handler, ) async { // try { // String? token = await authSecStorage.read(key: StorageKeys.authToken); // if (token != null) { // options.headers['Authorization'] = 'Bearer $token'; // } // } catch (e) { // getIt().log( // entity: LogEntity.error(message: 'Error to load access token $e'), // ); // } return handler.next(options); }, ); } InterceptorsWrapper get _error { return InterceptorsWrapper( onError: (DioException error, ErrorInterceptorHandler handler) async { final int? statusCode = error.response?.statusCode; if (statusCode == 401) { // String? token = await getIt().refresh(); } handler.next(error); }, ); } /// /// API клиент для работы с бекендом /// Dio get apiClient { final Dio client = Dio( BaseOptions( baseUrl: Env.get.url.toString(), contentType: 'application/json', ), ); client.interceptors ..add(_auth) ..add(_error) ..add( PrettyDioLogger( request: true, requestBody: true, requestHeader: true, responseBody: true, error: true, ), ) ..add(CurlLoggerDioInterceptor()) ..add( RetryInterceptor( dio: client, logPrint: print, retries: 1, retryDelays: [const Duration(seconds: 1)], ), ); return client; }