post method

Future post(
  1. String urlName,
  2. Map<String, dynamic> data, {
  3. Map<String, String>? headers,
  4. Encoding? encoding,
})

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