toBase64 method

Future<String> toBase64()

Encodes the resolved image as a base64 PNG string.

Completes with an error if the image fails to load or encode. The stream listener is removed once the image resolves.

Implementation

Future<String> toBase64() {
  final completer = Completer<String>();
  final stream = image.resolve(ImageConfiguration.empty);
  late final ImageStreamListener listener;
  listener = ImageStreamListener(
    (info, _) async {
      try {
        final byteData =
            await info.image.toByteData(format: ImageByteFormat.png);
        if (byteData == null) {
          completer
              .completeError(StateError('Failed to encode image to PNG'));
        } else {
          completer.complete(base64Encode(byteData.buffer.asUint8List()));
        }
      } catch (error, stackTrace) {
        if (!completer.isCompleted) {
          completer.completeError(error, stackTrace);
        }
      } finally {
        stream.removeListener(listener);
      }
    },
    onError: (error, stackTrace) {
      if (!completer.isCompleted) {
        completer.completeError(error, stackTrace);
      }
      stream.removeListener(listener);
    },
  );
  stream.addListener(listener);
  return completer.future;
}