post method
Performs an authenticated HTTP POST request with JSON body.
urlName is a dotted route name resolved via ApiUrls.
Implementation
Future post(String urlName, Map<String, dynamic> data,
{Map<String, String>? headers, Encoding? encoding}) async {
try {
// Ensure header and auth if exists
await ensureHeaders(headers);
if (kDebugMode) {
print(_headers);
}
// Get url by dotted name
String urlFromName = urls.getUrl(urlName);
// Build uri from string
var url = Uri.parse(urlFromName);
// Data can contain non string values, so we need to encode it
var encodedData = data.map((key, value) {
if (value is String) {
return MapEntry(key, value);
} else {
return MapEntry(key, jsonEncode(value));
}
});
// Encode data to json
String stringData = jsonEncode(encodedData);
// Perform request
var response = await http.post(url,
body: stringData, headers: _headers, encoding: encoding);
// update cookies from response
_updateCookie(response);
return response;
} catch (e) {
log('Api service post error ${e.toString()}');
rethrow;
}
}