2023-07-19 02:16:13 -06:00
|
|
|
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<Map<String, dynamic>?> get(String path) async {
|
|
|
|
try {
|
|
|
|
final res = await dio.get(path);
|
|
|
|
|
|
|
|
if (res.data != null) {
|
|
|
|
return res.data as Map<String, dynamic>;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
} catch (err) {
|
|
|
|
printRed('Error in get: $err');
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<Map<String, dynamic>?> 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<String, dynamic>;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
} catch (err) {
|
|
|
|
printRed('Error in put: $err');
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<Map<String, dynamic>?> 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<String, dynamic>;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
} catch (err) {
|
|
|
|
printRed('Error in delete: $err');
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|