capture static method
Captura el frame actual como PNG.
Retorna un mapa con:
format: siempre"png"width: ancho lógico en puntosheight: alto lógico en puntospixel_ratio: ratio de píxeles del dispositivobase64: imagen PNG codificada en base64
En caso de error retorna {"error": "<motivo>"}.
Implementation
static Future<Map<String, dynamic>> capture() async {
try {
// Obtener el RenderView raíz
final renderViews = WidgetsBinding.instance.renderViews;
if (renderViews.isEmpty) {
return {'error': 'no_render_view'};
}
final renderView = renderViews.first;
// debugLayer es null en release mode (Flutter no mantiene el layer tree)
final layer = renderView.debugLayer;
if (layer == null || layer is! OffsetLayer) {
return {'error': 'not_available_in_release'};
}
final pixelRatio = renderView.flutterView.devicePixelRatio;
final logicalSize = renderView.size;
// Renderizar el layer a una imagen en memoria
final image = await layer.toImage(
Offset.zero & logicalSize,
pixelRatio: pixelRatio,
);
// Convertir a PNG
final byteData = await image.toByteData(format: ui.ImageByteFormat.png);
image.dispose();
if (byteData == null) {
return {'error': 'capture_failed'};
}
final base64 = base64Encode(byteData.buffer.asUint8List());
return {
'format': 'png',
'width': logicalSize.width.toInt(),
'height': logicalSize.height.toInt(),
'pixel_ratio': pixelRatio,
'base64': base64,
};
} catch (e) {
return {'error': e.toString()};
}
}