Request method

Future<Response> Request(
  1. String url,
  2. String method, {
  3. Object? data,
  4. Map<String, dynamic>? params,
  5. bool auth = false,
  6. bool encrypt = false,
  7. Map<String, dynamic>? customHeaders,
})

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);
    }
  }
}