PlanningCenterApiResponse<T extends PlanningCenterApiData>.fromResponse constructor

PlanningCenterApiResponse<T extends PlanningCenterApiData>.fromResponse(
  1. String application,
  2. PlanningCenterApiQuery query,
  3. String requestBody,
  4. Response response,
)

Implementation

factory PlanningCenterApiResponse.fromResponse(
  String application,
  PlanningCenterApiQuery query,
  String requestBody,
  http.Response response,
) {
  // handle 'NO-CONTENT' (like DELETE) responses
  if (response.statusCode == 204) {
    return PlanningCenterApiResponse(
      application,
      query,
      response.request!.url,
      requestBody,
      response.statusCode,
      response.body,
      [],
      PlanningCenterApiMeta(),
      {},
      [],
    );
  }

  var body = json.decode(response.body);

  PlanningCenterApiMeta meta =
      PlanningCenterApiMeta.fromJson(body['meta'] ?? <String, dynamic>{});
  Map<String, dynamic> links = ((body['links'] ?? {}) as Map)
      .map((key, value) => MapEntry(key.toString(), value));

  // Process the raw data into List<PcoData>
  List<T> data = [];
  var rawData = body['data'] ?? [];
  if (rawData is! List) rawData = [rawData];
  for (var item in rawData) {
    data.add(PlanningCenterApiData.fromJson(item) as T);
    // data.add((item as Map).map((key, value) => MapEntry(key.toString(), value)));
  }

  // coerce the type of includes to List<Map<String, dynamic>>
  List<Map<String, dynamic>> included = [];
  if (body['included'] != null && body['included'] is List) {
    for (var inc in body['included']) {
      if (inc is Map) {
        included.add(inc.map((k, v) => MapEntry(k.toString(), v)));
      }
    }
  }
  return PlanningCenterApiResponse(
    application,
    query,
    response.request!.url,
    requestBody,
    response.statusCode,
    response.body,
    data,
    meta,
    links,
    included,
  );
}