captureScreenshot method
Future<CockpitCaptureResult>
captureScreenshot(
- CockpitScreenshotRequest request, {
- CockpitCaptureProfile? profile,
- bool allowFallback = true,
Implementation
Future<CockpitCaptureResult> captureScreenshot(
CockpitScreenshotRequest request, {
CockpitCaptureProfile? profile,
bool allowFallback = true,
}) async {
final effectiveProfile = profile ?? _defaultProfileFor(request);
final effectiveRequest = request.snapshotOptions == null
? request.copyWith(
snapshotOptions: _defaultSnapshotOptionsFor(request.reason),
)
: request;
final surfaceState = _requireSurfaceState();
if (effectiveRequest.reason == CockpitScreenshotReason.acceptance) {
await waitForUiIdle();
}
final snapshotData = effectiveRequest.includeSnapshot
? surfaceState.snapshot(
options:
effectiveRequest.snapshotOptions ??
_defaultSnapshotOptionsFor(effectiveRequest.reason),
)
: null;
final prefersNativeCapture =
effectiveProfile == CockpitCaptureProfile.acceptance ||
effectiveProfile == CockpitCaptureProfile.nativePreferred;
if (prefersNativeCapture &&
await FlutterCockpit.binding.queryNativeCaptureAvailability()) {
try {
final screenshot = await FlutterCockpit.binding.nativeCapture.capture(
request: effectiveRequest,
profile: effectiveProfile,
snapshot: snapshotData,
);
return CockpitCaptureResult(
screenshot: screenshot,
requestedProfile: effectiveProfile,
resolvedCaptureKind: CockpitCaptureKind.nativeAcceptance,
);
} on MissingPluginException catch (error) {
if (!allowFallback) {
rethrow;
}
final screenshot = await surfaceState.captureScreenshot(
effectiveRequest,
);
return CockpitCaptureResult(
screenshot: screenshot,
requestedProfile: effectiveProfile,
resolvedCaptureKind: CockpitCaptureKind.flutterView,
usedFallback: true,
degradationReason: error.message,
);
} on PlatformException catch (error) {
if (!allowFallback) {
rethrow;
}
final screenshot = await surfaceState.captureScreenshot(
effectiveRequest,
);
return CockpitCaptureResult(
screenshot: screenshot,
requestedProfile: effectiveProfile,
resolvedCaptureKind: CockpitCaptureKind.flutterView,
usedFallback: true,
degradationReason: error.message ?? error.code,
);
}
}
final screenshot = await surfaceState.captureScreenshot(effectiveRequest);
return CockpitCaptureResult(
screenshot: screenshot,
requestedProfile: effectiveProfile,
resolvedCaptureKind: CockpitCaptureKind.flutterView,
);
}