Blob constructor

Blob(
  1. List blobParts, [
  2. String? type,
  3. String? encoding
])

Implementation

factory Blob(List blobParts, [String? type, String? encoding]) {
  for (var i = 0; i < blobParts.length; i++) {
    final part = blobParts[i];
    if (part is String && i + 1 < blobParts.length) {
      blobParts[i] = '$part\x00';
    }
  }
  var parts = List<List<int>>.from(
    blobParts.map((part) {
      if (part is String) {
        return utf8.encode(part);
      }
      if (part is _Blob) {
        return part._data;
      }
      if (part is TypedData) {
        return Uint8List.view(
          part.buffer,
          part.offsetInBytes,
          part.lengthInBytes,
        );
      }
      if (part is ByteBuffer) {
        return part.asUint8List();
      }
      if (part is List<int>) {
        return part;
      }
      throw ArgumentError('Encountered an invalid blob part');
    }),
  );
  var n = 0;
  for (var part in parts) {
    n += part.length;
  }
  final result = Uint8List(n);
  var i = 0;
  for (var part in parts) {
    result.setAll(i, part);
    i += part.length;
  }
  return _Blob(result, type: type ?? '');
}