import 'package:dio/dio.dart'; import '../auth/secure_storage.dart'; import 'auth_interceptor.dart'; class ApiClient { late final Dio _dio; ApiClient({required String baseUrl, required SecureStorageService storage}) { _dio = Dio(BaseOptions( baseUrl: baseUrl, connectTimeout: const Duration(seconds: 10), receiveTimeout: const Duration(seconds: 30), headers: {'Content-Type': 'application/json'}, )); _dio.interceptors.addAll([ AuthInterceptor(storage: storage, dio: _dio), LogInterceptor(requestBody: true, responseBody: true), ]); } /// Exposed for testing only. ApiClient.withDio(this._dio); Future> get(String path, {Map? params}) async { final response = await _dio.get(path, queryParameters: params); return response.data; } Future> post(String path, {dynamic data}) async { final response = await _dio.post(path, data: data); return response.data; } Future> put(String path, {dynamic data}) async { final response = await _dio.put(path, data: data); return response.data; } Future> delete(String path) async { final response = await _dio.delete(path); return response.data; } /// Returns a list for endpoints that respond with a JSON array. Future> getList(String path, {Map? params}) async { final response = await _dio.get(path, queryParameters: params); return response.data as List; } /// Deletes a resource and expects no response body (204 No Content). Future deleteVoid(String path) async { await _dio.delete(path); } }