import 'package:dio/dio.dart'; import 'package:logger/logger.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:qpay/config/app_config.dart'; var logger = Logger(printer: PrettyPrinter()); class Http { final Dio dio = Dio(); final String baseUrl = AppConfig.baseUrl; Http() { dio.options.baseUrl = baseUrl; // dio.options.connectTimeout = const Duration(seconds: 120); // dio.options.receiveTimeout = const Duration(seconds: 120); // dio.options.sendTimeout = const Duration(seconds: 120); dio.interceptors.add( LogInterceptor( request: true, responseBody: false, requestBody: true, error: true, ), ); } Future> getHeaders() async { Map headers = {'Content-Type': 'application/json'}; var prefs = await SharedPreferences.getInstance(); String token = prefs.getString("token") ?? ""; headers['Authorization'] = 'Bearer $token'; return headers; } Future get(String url) async { Map headers = await getHeaders(); Response response; response = await dio.get(baseUrl + url, options: Options(headers: headers)); logger.i(response.data.toString()); return response.data; } /// Returns the raw [Response] object (including status code) /// instead of just the response body. Future getRaw(String url) async { Map headers = await getHeaders(); final response = await dio.get( baseUrl + url, options: Options(headers: headers), ); logger.i(response.data.toString()); return response; } /// Issues a POST request without authentication headers and returns /// the raw [Response] object. Future postRaw(String url, {dynamic data}) async { Map headers = await getHeaders(); final response = await dio.post( baseUrl + url, data: data, options: Options(headers: headers), ); logger.i(response.data.toString()); return response; } Future post(String url, dynamic data) async { Map headers = await getHeaders(); Response response; response = await dio.post( baseUrl + url, data: data, options: Options(headers: headers), ); logger.i(response.data.toString()); return response.data; } Future patch(String url, dynamic data) async { Map headers = await getHeaders(); Response response; response = await dio.patch( baseUrl + url, data: data, options: Options(headers: headers), ); logger.i(response.data.toString()); return response.data; } Future put(String url, dynamic data) async { Map headers = await getHeaders(); Response response; response = await dio.put( baseUrl + url, data: data, options: Options(headers: headers), ); logger.i(response.data.toString()); return response.data; } Future delete(String url) async { Map headers = await getHeaders(); Response response; response = await dio.delete( baseUrl + url, options: Options(headers: headers), ); logger.i(response.data.toString()); return response.data; } Future multipartPost( String url, Map fields, String fileFieldName, List fileBytes, String fileName, ) async { final formData = FormData.fromMap({ ...fields, fileFieldName: MultipartFile.fromBytes(fileBytes, filename: fileName), }); final prefs = await SharedPreferences.getInstance(); final token = prefs.getString("token") ?? ""; final response = await dio.post( baseUrl + url, data: formData, options: Options(headers: {'Authorization': 'Bearer $token'}), ); logger.i(response.data.toString()); return response.data; } }