captureScreenshot method
Future<CockpitCapturedScreenshot>
captureScreenshot(
- CockpitScreenshotRequest request, {
- double pixelRatio = 1.0,
Implementation
Future<CockpitCapturedScreenshot> captureScreenshot(
CockpitScreenshotRequest request, {
double pixelRatio = 1.0,
}) async {
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));
}
final screenshot = await _capture.capture(
repaintBoundaryKey: _boundaryKey,
request: request,
pixelRatio: pixelRatio,
cropRect: cropRect,
);
if (!request.includeSnapshot) return screenshot;
final attachedSnapshot = snapshot(
options: request.snapshotOptions ?? const CockpitSnapshotOptions.live(),
);
final degradationReason = screenshot.degradationReason;
return CockpitCapturedScreenshot(
artifact: screenshot.artifact,
bytes: screenshot.bytes,
snapshot: degradationReason == null
? attachedSnapshot
: attachedSnapshot.copyWith(degradationReason: degradationReason),
degradationReason: degradationReason,
);
}