PlanningCenterApiResponse<T extends PlanningCenterApiData>.fromResponse constructor
PlanningCenterApiResponse<T extends PlanningCenterApiData>.fromResponse (
- String application,
- PlanningCenterApiQuery query,
- String requestBody,
- 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,
);
}