getObjects method

  1. @override
Future<List<ObjectResult>> getObjects(
  1. List<String> objectIds, {
  2. ObjectIncludeOptions? include,
})
override

Batched object reads: one entry per input id, in the same order.

Implementation

@override
Future<List<ObjectResult>> getObjects(
  List<String> objectIds, {
  ObjectIncludeOptions? include,
}) async {
  if (objectIds.isEmpty) return const [];
  final results = <ObjectResult>[];
  for (var start = 0; start < objectIds.length; start += _objectBatchSize) {
    final stop = start + _objectBatchSize;
    final batch = objectIds.sublist(
      start,
      stop < objectIds.length ? stop : objectIds.length,
    );
    final data = await _client.executeData(
      _multiGetObjectsOperation,
      generated.Variables$Query$MultiGetObjects(
        keys: batch.map((id) => schema.Input$ObjectKey(address: id)).toList(),
      ),
    );
    final objects = data.multiGetObjects;
    for (var i = 0; i < objects.length; i++) {
      results.add(
        objects[i] == null
            ? ObjectError(
                'Object ${batch[i]} not found',
                code: 'notExists',
                reason: ObjectErrorReason.notFound,
                objectId: batch[i],
              )
            : ObjectSuccess(_mapObject(objects[i]!)),
      );
    }
  }
  return results;
}