loadGrid method

Future<Grid> loadGrid({
  1. required Uri uri,
  2. List<ApptiveGridSorting>? sorting,
  3. ApptiveGridFilter? filter,
  4. bool isRetry = false,
  5. Map<String, String> headers = const {},
  6. bool loadEntities = true,
})

Loads a Grid represented by gridUri

sorting defines the order in which items will be returned The order of ApptiveGridSorting in sorting will rank the order in which values should be sorted headers will be added in addition to ApptiveGridClient.defaultHeaders

If loadEntities is true and there is a ApptiveLinkType.entities Link it will also fetch the entities Requires Authorization throws Response if the request fails

Implementation

Future<Grid> loadGrid({
  required Uri uri,
  List<ApptiveGridSorting>? sorting,
  ApptiveGridFilter? filter,
  bool isRetry = false,
  Map<String, String> headers = const {},
  bool loadEntities = true,
}) async {
  final gridViewUrl = _generateApptiveGridUri(uri);

  final gridHeaders = _createHeadersWithDefaults(headers);
  gridHeaders['Accept'] = 'application/vnd.apptivegrid.hal;version=2';
  final gridViewResponse =
      await _client.get(gridViewUrl, headers: gridHeaders);
  if (gridViewResponse.statusCode >= 400) {
    if (gridViewResponse.statusCode == 401 && !isRetry) {
      await authenticator.checkAuthentication();
      return loadGrid(
        uri: uri,
        sorting: sorting,
        filter: filter,
        isRetry: true,
      );
    }
    throw gridViewResponse;
  }

  final gridToParse = jsonDecode(gridViewResponse.body);
  final grid = Grid.fromJson(gridToParse);
  if (loadEntities && grid.links.containsKey(ApptiveLinkType.entities)) {
    final entitiesResponse = await this.loadEntities(
      uri: grid.links[ApptiveLinkType.entities]!.uri,
      layout: ApptiveGridLayout.indexed,
      filter: filter,
      sorting: sorting,
    );

    final entities = entitiesResponse.items;

    gridToParse['entities'] = entities;
    return Grid.fromJson(gridToParse);
  } else {
    return grid;
  }
}