readBlob method
Stream blob bytes; return null when missing.
Implementation
@override
Future<BlobReadResult?> readBlob(BlobReadRequest request) async {
_ensureOpen();
final collectionMap = _storage[request.collection];
if (collectionMap == null) {
return null;
}
final entry = collectionMap[request.id];
if (entry == null) {
return null;
}
Uint8List payload;
int? rangeStart;
int? rangeEnd;
if (request.rangeStart != null || request.rangeEnd != null) {
final start = request.rangeStart ?? 0;
final end = request.rangeEnd;
if (start < 0 || (end != null && end <= start)) {
return null;
}
rangeStart = start;
rangeEnd = end;
final actualEnd = end != null
? min(end, entry.payload.length)
: entry.payload.length;
if (start >= entry.payload.length) {
payload = Uint8List(0);
} else {
payload = Uint8List.sublistView(entry.payload, start, actualEnd);
}
} else {
payload = entry.payload;
}
return BlobReadResult(
descriptor: entry.descriptor,
bytes: _chunkedPayload(payload),
rangeStart: rangeStart,
rangeEnd: rangeEnd,
);
}