bulkGet method

Future<Map<String, Map<String, dynamic>>> bulkGet(
  1. List<String> ids, {
  2. int chunkSize = 500,
})

Implementation

Future<Map<String, Map<String, dynamic>>> bulkGet(
  List<String> ids, {
  int chunkSize = 500,
}) async {
  final results = <String, Map<String, dynamic>>{};
  final prefix = '$_name/';

  if (_local || !_ws.isConnected) {
    for (final id in ids) {
      final data = await _readLocal('$_name/$id');
      if (data != null && data.isNotEmpty) {
        results[id] = await _decodeBytes(data);
      }
    }
    return results;
  }

  for (var i = 0; i < ids.length; i += chunkSize) {
    final end = math.min(i + chunkSize, ids.length);
    final chunkIds = ids.sublist(i, end);
    final blockIds = chunkIds.map((id) => '$_name/$id').toList();
    final raw = await _ws.bulkGet(blockIds);
    for (final entry in raw.entries) {
      if (entry.value == null || entry.value!.isEmpty) continue;
      final docId = entry.key.startsWith(prefix)
          ? entry.key.substring(prefix.length)
          : entry.key;
      results[docId] = await _decodeBytes(entry.value!);
    }
  }
  return results;
}