invoke method
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,
};
}