compressToJPEGStream method
The SDK's per-page total and progress fields are not reliable in
SDK 7.0.3 (total counts input files, not pages), so only the page
index and name are passed on.
Implementation
@override
Stream<Map<String, dynamic>> compressToJPEGStream(List<String> imagePaths) {
final controller = StreamController<Map<String, dynamic>>();
() async {
try {
if (imagePaths.isEmpty) throw StateError('No images given.');
final sdk = await _readySdk();
final inputs = await Future.wait(imagePaths.map(_fetchBytes));
void onPage(_JpegPage page) {
controller.add({
'index': page.index,
'name': page.name,
'url': _objectUrl(page.fileData, 'image/jpeg'),
});
}
final response =
await sdk.compressToJpgStream(inputs.toJS, onPage.toJS).toDart;
_dataOrThrow(response);
} catch (e) {
controller.addError(
PlatformException(code: 'JPEG_STREAM_FAILED', message: _message(e)));
} finally {
await controller.close();
}
}();
return controller.stream;
}