captureScreenshot method

Future<CockpitCapturedScreenshot> captureScreenshot(
  1. CockpitScreenshotRequest request, {
  2. double pixelRatio = 1.0,
})

Implementation

Future<CockpitCapturedScreenshot> captureScreenshot(
  CockpitScreenshotRequest request, {
  double pixelRatio = 1.0,
}) {
  Rect? cropRect;
  final cropLocator = request.cropLocator;
  if (cropLocator != null) {
    final resolution = _registry.resolve(cropLocator);
    final geometry = resolution.target == null
        ? null
        : CockpitTargetGeometryResolver.maybeFromTarget(resolution.target!);
    final viewport = _viewportGeometry();
    if (!resolution.isSuccess || geometry == null || viewport == null) {
      throw StateError('Screenshot crop locator has no visible geometry.');
    }
    final target = Rect.fromLTWH(
      geometry.left,
      geometry.top,
      geometry.width,
      geometry.height,
    );
    final viewportRect = Rect.fromLTWH(
      viewport.left,
      viewport.top,
      viewport.width,
      viewport.height,
    );
    final visible = target.intersect(viewportRect);
    if (visible.isEmpty) {
      throw StateError(
        'Screenshot crop locator is outside the Flutter view.',
      );
    }
    cropRect = visible.shift(Offset(-viewport.left, -viewport.top));
  }
  return _capture.capture(
    repaintBoundaryKey: _boundaryKey,
    request: request,
    snapshot: request.includeSnapshot
        ? snapshot(
            options:
                request.snapshotOptions ??
                const CockpitSnapshotOptions.live(),
          )
        : null,
    pixelRatio: pixelRatio,
    cropRect: cropRect,
  );
}