36 lines
847 B
Dart
36 lines
847 B
Dart
import 'dart:convert';
|
|
import 'dart:typed_data';
|
|
|
|
// adapted from Flutter `_OutputBuffer` in `/foundation/consolidate_response.dart`
|
|
class OutputBuffer extends ByteConversionSinkBase {
|
|
List<List<int>>? _chunks = <List<int>>[];
|
|
int _contentLength = 0;
|
|
Uint8List? _bytes;
|
|
|
|
@override
|
|
void add(List<int> chunk) {
|
|
assert(_bytes == null);
|
|
_chunks!.add(chunk);
|
|
_contentLength += chunk.length;
|
|
}
|
|
|
|
@override
|
|
void close() {
|
|
if (_bytes != null) {
|
|
// We've already been closed; this is a no-op
|
|
return;
|
|
}
|
|
_bytes = Uint8List(_contentLength);
|
|
int offset = 0;
|
|
for (final List<int> chunk in _chunks!) {
|
|
_bytes!.setRange(offset, offset + chunk.length, chunk);
|
|
offset += chunk.length;
|
|
}
|
|
_chunks = null;
|
|
}
|
|
|
|
Uint8List get bytes {
|
|
assert(_bytes != null);
|
|
return _bytes!;
|
|
}
|
|
}
|