Request method
Implementation
Future<Response<dynamic>> Request(String url, String method,
{Object? data,
Map<String, dynamic>? params,
bool auth = false,
bool encrypt = false,
Map<String, dynamic>? customHeaders}) async {
try {
// print("Request--Params: ${customHeaders}");
// set auth
final prefs = await SharedPreferences.getInstance();
var ua = prefs.getString("ua");
final info = await PackageInfo.fromPlatform();
if (auth) {
var at = prefs.getString("MBaaS.auth.accessToken");
if (at == null) throw ("Authentication required!");
if (customHeaders != null) {
dio.options = BaseOptions(headers: {
"Authorization": "Bearer $at",
"User-Agent": ua,
"x-app-id": info.packageName,
"accept": defaultType,
...customHeaders,
Headers.contentTypeHeader: defaultType
});
} else {
dio.options = BaseOptions(headers: {
"Authorization": "Bearer $at",
"User-Agent": ua,
"x-app-id": info.packageName,
"accept": defaultType,
Headers.contentTypeHeader: defaultType
});
}
} else {
if (customHeaders != null) {
dio.options = BaseOptions(
headers: {
"User-Agent": ua,
"x-app-id": info.packageName,
"accept": defaultType,
...customHeaders,
Headers.contentTypeHeader: defaultType
},
);
} else {
dio.options = BaseOptions(
headers: {
"User-Agent": ua,
"x-app-id": info.packageName,
"accept": defaultType,
Headers.contentTypeHeader: defaultType
},
);
}
}
var payloadData = data;
Map<String, Object?>? keySet;
if (encrypt) {
//first fetch for key
keySet = await payloadEnc.generateKeyPair();
if (data != null) {
// print("have payload data");
var encryptData = await payloadEnc.encryptData(data, keySet);
var newPayload = {"cipherText": encryptData};
payloadData = json.encode(newPayload);
}
final base64Str = buildEncKeyHeader(keySet);
dio.options = BaseOptions(
headers: {...dio.options.headers, encryptionKeyLabel: base64Str},
);
}
// print("====ISI PAYLOAD=====");
// print(dio.options.headers);
// print(payloadData);
// print("====================");
var response = await dio.request(
url,
data: payloadData,
queryParameters: params,
options: Options(method: method),
);
// var response;
// await dio.request(
// url,
// data: payloadData,
// queryParameters: params,
// options: Options(method: method),
// ).then((value) {
// print("value please:");
// print(value);
// response = value;
// }).catchError((onError) {
// print(onError);
// });
if (encrypt) {
var ch = response.data;
// print("--------RESPONSE ENCRYPT---------");
// print(ch);
try {
var ct = chiperType.fromJson(ch);
// print(ct.cipherText);
var decrypt = await payloadEnc.decryptData(ct.cipherText!, keySet!);
var jsondecode = json.decode(decrypt);
response.data = jsondecode;
return response;
} catch (e) {
return response;
}
}
return response;
} on DioError catch (e) {
// print("error request");
if (e.response != null) {
// print("res != null aloha");
// var data = Map<String, dynamic>.from(e.response!.data);
// if (data["errors"]?[0]?["code"] == "IVREF") {
// var evtCb = opts!.options?.eventCallback;
// evtCb({"name": "invalid_refresh_token"});
// }
// if (data["errors"]?[0]?["code"] == "BADAUTH") {
// var evtCb = opts!.options?.eventCallback;
// evtCb({"name": "invalid_auth"});
// }
// if (data["errors"]?[0]?["code"] == "BADREQ") {
// var evtCb = opts!.options?.eventCallback;
// evtCb({"name": "invalid_token"});
// }
// print(e.response!.headers);
// print(e.response!.requestOptions.uri);
throw (e.response!.data);
} else {
var evtCb = opts!.options?.eventCallback;
evtCb({"name": "network_error", "error": e});
// Something happened in setting up or sending the request that triggered an Error
// print("error in first request ${e}");
// print(e.requestOptions);
// print(e.message);
throw (e.message);
}
}
}