import 'package:dio/dio.dart'; import 'package:helpers/helpers/print.dart'; class Api { static final Api _instance = Api._internal(); factory Api() { if (_instance.initDone) return _instance; _instance.initDone = true; _instance.dio = Dio(); _instance.dio.options.baseUrl = "http://localhost:8081/"; _instance.dio.interceptors.add( InterceptorsWrapper( onRequest: (RequestOptions options, RequestInterceptorHandler handler) { // Do something before request is sent. // If you want to resolve the request with custom data, // you can resolve a `Response` using `handler.resolve(response)`. // If you want to reject the request with a error message, // you can reject with a `DioException` using `handler.reject(dioError)`. return handler.next(options); }, onResponse: (Response response, ResponseInterceptorHandler handler) { if (response.statusCode != null && response.statusCode! < 500 && response.statusCode! >= 400) { return handler.reject(DioException.badResponse( requestOptions: RequestOptions(), response: response, statusCode: response.statusCode!)); } // Do something with response data. // If you want to reject the request with a error message, // you can reject a `DioException` object using `handler.reject(dioError)`. return handler.next(response); }, onError: (DioException e, ErrorInterceptorHandler handler) { printPink(e); // Do something with response error. // If you want to resolve the request with some custom data, // you can resolve a `Response` object using `handler.resolve(response)`. return handler.next(e); }, ), ); return _instance; } Api._internal(); bool initDone = false; late final Dio dio; Future?> get(String path) async { try { final res = await dio.get(path); if (res.data != null) { return res.data as Map; } return null; } catch (err) { printRed('Error in get: $err'); return null; } } Future?> put( {required String path, Object? data}) async { try { final res = await dio.put(path, data: data); if (res.data != null) { return res.data as Map; } return null; } catch (err) { printRed('Error in put: $err'); return null; } } Future?> delete( {required String path, Object? data}) async { try { final res = await dio.delete(path, data: data); if (res.data != null) { return res.data as Map; } return null; } catch (err) { printRed('Error in delete: $err'); return null; } } }