toImage method

Future<Uint8List> toImage(
  1. double devicePixelRatio, [
  2. Pointer<Void>? eventTargetPointer
])

Implementation

Future<Uint8List> toImage(double devicePixelRatio,
    [Pointer<Void>? eventTargetPointer]) {
  assert(!_disposed, 'WebF have already disposed');
  Completer<Uint8List> completer = Completer();
  try {
    if (eventTargetPointer != null && !hasBindingObject(eventTargetPointer)) {
      String msg = 'toImage: unknown node id: $eventTargetPointer';
      completer.completeError(Exception(msg));
      return completer.future;
    }
    var node = eventTargetPointer == null
        ? document.documentElement
        : getBindingObject(eventTargetPointer);
    if (node is Element) {
      SchedulerBinding.instance.addPostFrameCallback((_) {
        node
            .toBlob(devicePixelRatio: devicePixelRatio)
            .then((Uint8List bytes) {
          completer.complete(bytes);
        }).catchError((e, stack) {
          String msg =
              'toBlob: failed to export image data from element id: $eventTargetPointer. error: $e}.\n$stack';
          completer.completeError(Exception(msg));
        });
      });
      SchedulerBinding.instance.scheduleFrame();
      return completer.future;
    } else {
      String msg = 'toBlob: node is not an element, id: $eventTargetPointer';
      completer.completeError(Exception(msg));
    }
  } catch (e, stack) {
    completer.completeError(e, stack);
  }
  return completer.future;
}