invoke method

Future<Map> invoke({
  1. required String method,
  2. required Map parameters,
  3. String? path_api,
  4. String method_request = "get",
  5. Client? httpClient,
})

Implementation

Future<Map> invoke({
  required String method,
  required Map parameters,
  String? path_api,
  String method_request = "get",
  Client? httpClient,
}) async {
  httpClient ??= http_client;
  Map<String, String> headers = {
    'Accept': 'application/json',
    "Access-Control-Allow-Origin": "*",
    "Content-Type": "application/json",
  };
  Map<String, dynamic> queryParameters = {};

  if (method != "post") {
    parameters.forEach((key, value) {
      if (value == null) {
        return;
      }
      if (value is String == false) {
        if (value is Map || value is List) {
          queryParameters[key] = json.encode(value);
        } else {
          queryParameters[key] = value.toString();
        }
      } else {
        queryParameters[key] = value;
      }
    });
  }

  List<String> pathSegments = [
    method,
  ];

  if (path_api != null) {
    pathSegments.add(path_api);
  }

  Uri uri = telegraph_api.replace(
    pathSegments: pathSegments,
    queryParameters: queryParameters,
  );
  late Response response;
  if (method == "post") {
    response = await httpClient.post(uri,
        body: json.encode(parameters), headers: headers);
  } else {
    response = await httpClient.get(uri, headers: headers);
  }
  Map result = () {
    try {
      return json.decode(response.body);
    } catch (e) {
      // print(response.body);
      return {"error_data": response.body};
    }
  }();
  if (result["ok"] != true) {
    result["@type"] = "error";
    return result;
  }
  if (result["result"] is Map) {
    Map new_data = {
      "@type": method
          .replaceAll(RegExp("^(create|get|copy)", caseSensitive: false), "")
          .toLowerCaseFirstData(),
      ...(result["result"] as Map),
    };

    return new_data;
  }
  return {
    "@type": "ok",
    ...result,
  };
}