compressToJPEGStream method

  1. @override
Stream<Map<String, dynamic>> compressToJPEGStream(
  1. List<String> imagePaths
)
override

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;
}