You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
uco-mobile-poc/lib/app/core/config/server_request.dart

122 lines
4.4 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:dio/adapter.dart';
import 'package:dio/dio.dart';
import 'package:uco_mobile_poc/app/core/config/requset_attr.dart';
import 'package:uco_mobile_poc/app/core/config/server_response.dart';
import '../constants/translation_keys.dart';
import '../utils/logs_utils.dart';
import 'api_utils.dart';
import 'connectivity_service.dart';
import 'dio_exceptions.dart';
import 'logging.dart';
class ServerRequest {
static Future<ServerResponse> request(RequestAttr requestAttr) async {
/// Internet Connectivity Check
if (!ConnectivityHelper.isNetworkConnected) {
ServerResponse serverResponse = ServerResponse.init();
serverResponse.isError = true;
serverResponse.errorCode = "ERR_CONNECTION";
serverResponse.errorMsg = TranslationKeys.makeTranslation(TranslationKeys.ERR_CONNECTION);
return serverResponse;
}
_initRequest(requestAttr);
try {
dp("============request Before>>>> ", requestAttr.toString());
final response = await _requestDio.request(
requestAttr.url,
options: Options(
method: requestAttr.requestType.name,
headers: requestAttr.headers,
),
queryParameters: requestAttr.queryParams,
data: requestAttr.body,
);
dp("============after Before>>>> ", response.toString());
return ApiUtils.parseServerResponse(response);
} on DioError catch (e) {
ServerResponse response = DioExceptions.parseError(e);
// if (response.statusCode == 401) {
// return refreshToken(requestAttr);
// }
pe("============catch Before>>>> ", e.toString());
pe("Error responce", e.response);
return DioExceptions.parseError(e);
}
}
static late Dio _requestDio;
static late BaseOptions _baseOptions;
static void _initRequest(RequestAttr attr) {
_baseOptions = BaseOptions(baseUrl: attr.url, connectTimeout: 15000, receiveTimeout: 9000);
_baseOptions.contentType = Headers.jsonContentType;
if (attr.headers.isNotEmpty) {
_baseOptions.headers.addAll(attr.headers);
}
if (attr.queryParams.isNotEmpty) {
_baseOptions.queryParameters.addAll(attr.queryParams);
}
_requestDio = Dio(_baseOptions);
_requestDio.interceptors.add(Logging(attr));
_requestDio.interceptors.add(InterceptorsWrapper(
onResponse: (Response<dynamic> response, ResponseInterceptorHandler handler) {
// Create a new response object without headers
final newResponse = Response(
requestOptions: response.requestOptions,
data: response.data,
statusCode: response.statusCode,
statusMessage: response.statusMessage,
);
return handler.resolve(newResponse);
},
));
_requestDio.transformer = DefaultTransformer();
(_requestDio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (HttpClient client) {
client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
return client;
};
}
// static Future<ServerResponse> refreshToken(RequestAttr requestAttr) async {
// RefreshTokenRequestModel userInfo = RefreshTokenRequestModel(
// porOrgacode: SessionCache.instance.userInfo.porOrgacode,
// pctCstycode: SessionCache.instance.userInfo.pctCstycode,
// cmpCustcode: SessionCache.instance.userInfo.cmpCustcode,
// cmpUserId: SessionCache.instance.userInfo.cmpUserId,
// token: SessionCache.instance.userInfo.jwtToken,
// );
//
// Map<String, Object> headers = {};
// headers["Authorization"] = "Bearer ${SessionCache.instance.userInfo.jwtToken}";
// headers["Channelcode"] = SessionCache.instance.userInfo.channelCode;
// headers["Cmpuserid"] = SessionCache.instance.userInfo.cmpUserId;
// // headers["Devicename"] = "Mobile";
//
// ServerResponse refreshTokenResponse = await ServerRequest.request(RequestAttr.withParamsAndBody(UrlContants.REFRESH_TOKEN, HttpMethod.POST, userInfo.toMap(), headers, {}));
// String token = refreshTokenResponse.response["token"] ?? "";
// if (token.isEmpty) {
// Toasty.error("Session timeout, Signing out...");
// Get.offAllNamed(Routes.LOGIN);
// return ServerResponse.init();
// }
//
// SessionCache.instance.userInfo.jwtToken = token;
// if (requestAttr.headers.containsKey("Authorization")) {
// requestAttr.headers["Authorization"] = "Bearer ${SessionCache.instance.userInfo.jwtToken}";
// }
// return await ServerRequest.request(requestAttr);
// }
}