loadEntities<T> method
Future<EntitiesResponse<T> >
loadEntities<T>({
- required Uri uri,
- ApptiveGridLayout layout = ApptiveGridLayout.field,
- List<
ApptiveGridSorting> ? sorting, - ApptiveGridFilter? filter,
- bool isRetry = false,
- Map<
String, String> headers = const {},
Load Entities of a Grid that are accessed by uri
the layout in which the entities will be returned is determined by layout
sorting
allows to apply custom sorting
filter
allows to get custom filters
headers
will be added in addition to ApptiveGridClient.defaultHeaders
Implementation
Future<EntitiesResponse<T>> loadEntities<T>({
required Uri uri,
ApptiveGridLayout layout = ApptiveGridLayout.field,
List<ApptiveGridSorting>? sorting,
ApptiveGridFilter? filter,
bool isRetry = false,
Map<String, String> headers = const {},
}) async {
final baseUrl = Uri.parse(options.environment.url);
final requestUri = uri.replace(
scheme: baseUrl.scheme,
host: baseUrl.host,
queryParameters: {
...uri.queryParameters,
'layout': layout.queryParameter,
if (sorting != null)
'sorting':
jsonEncode(sorting.map((e) => e.toRequestObject()).toList()),
if (filter != null) 'filter': jsonEncode(filter.toJson()),
},
);
final response = await _client.get(
requestUri,
headers: _createHeadersWithDefaults(headers),
);
if (response.statusCode >= 400) {
if (response.statusCode == 401 && !isRetry) {
await authenticator.checkAuthentication();
return loadEntities<T>(
uri: uri,
layout: layout,
sorting: sorting,
filter: filter,
isRetry: true,
);
}
throw response;
}
final decodedResponse = jsonDecode(response.body);
if (decodedResponse is List) {
return EntitiesResponse(items: decodedResponse.cast<T>());
} else {
// Preparation for Paging
return EntitiesResponse(items: decodedResponse['items']);
}
}