/
fraq11
/
ElijahFlutter
Обзор
Документация
Войти
/
fraq11
/
ElijahFlutter
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
4
CI/CD
Аналитика
Безопасность
master
lib/services/api_client.dart
84 строки
2 KB
octomors
lab 10 flutter done
24 май 2026, 19:59
24 май 2026, 19:59
2c672b5
Код
Авторство
О чём код?
import 'dart:convert'; import 'package:dio/dio.dart'; import 'api_exceptions.dart'; import 'auth_state.dart'; class ApiClient { ApiClient({ required String baseUrl, Dio? client, AuthState? authState, }) : _authState = authState, _client = client ?? Dio( BaseOptions( baseUrl: baseUrl, connectTimeout: const Duration(seconds: 12), receiveTimeout: const Duration(seconds: 12), ), ) { _client.interceptors.add( InterceptorsWrapper( onRequest: (options, handler) { final token = _authState?.token; if (token != null && token.isNotEmpty) { options.headers['Authorization'] = 'Bearer $token'; } handler.next(options); }, ), ); } final Dio _client; final AuthState? _authState; Future<Response<dynamic>> get(String path, {Map<String, dynamic>? query}) { return _request(() => _client.get(path, queryParameters: query)); } Future<Response<dynamic>> post( String path, { Object? data, Map<String, dynamic>? query, Options? options, }) { return _request(() => _client.post(path, data: data, queryParameters: query, options: options)); } Future<Response<dynamic>> put(String path, {Object? data, Map<String, dynamic>? query}) { return _request(() => _client.put(path, data: data, queryParameters: query)); } Future<Response<dynamic>> patch(String path, {Object? data, Map<String, dynamic>? query}) { return _request(() => _client.patch(path, data: data, queryParameters: query)); } Future<Response<dynamic>> delete(String path, {Object? data, Map<String, dynamic>? query}) { return _request(() => _client.delete(path, data: data, queryParameters: query)); } dynamic normalizeResponse(dynamic data) { if (data is String) { return jsonDecode(data); } return data; } Future<Response<dynamic>> _request(Future<Response<dynamic>> Function() call) async { try { return await call(); } on DioException catch (error) { final statusCode = error.response?.statusCode; throw ApiException( 'Request failed (${error.type.name})', statusCode: statusCode, cause: error, ); } catch (error) { throw ApiException('Unexpected API error', cause: error); } } }