Иногда нужно сохранить нарисованное в
CustomPainter в виде PNG, но не хочется (или невозможно) отображать его на экране. Можно это сделать, используя Canvas и PictureRecorder: Future<Uint8List> toImage(BuildContext context, Size size) async {
final devicePixelRatio = MediaQuery.of(context).devicePixelRatio;
final recorder = ui.PictureRecorder();
final canvas = Canvas(recorder);
// Масштабируем канвас под плотность пикселей
canvas.scale(devicePixelRatio);
final painter = MyPainter(); // <-- ваш кастомный painter
painter.paint(canvas, size);
// Считаем итоговый размер
final width = (size.width * devicePixelRatio).floor();
final height = (size.height * devicePixelRatio).floor();
// Получаем изображение
final imageResult = await recorder
.endRecording()
.toImage(width, height);
// Конвертируем в PNG
final byteData = await imageResult.toByteData(
format: ui.ImageByteFormat.png,
);
return byteData!.buffer.asUint8List();
}
