Я использую qr_flutter для создания QrImage. Это нормально, но я хотел бы преобразовать QrImage в изображение, чтобы создать файл PDF для печати на принтере. Пожалуйста, помогите!
QrImage(
data: qrString,
size: 300.0,
version: 10,
backgroundColor: Colors.white,
),
Используйте виджет RepaintBoundary
с ключом для экспорта виджета в строку b64, которую затем вы можете экспортировать как изображение.
Пример:
Future<Uint8List> _getWidgetImage() async {
try {
RenderRepaintBoundary boundary =
_renderObjectKey.currentContext.findRenderObject();
ui.Image image = await boundary.toImage(pixelRatio: 3.0);
ByteData byteData =
await image.toByteData(format: ui.ImageByteFormat.png);
var pngBytes = byteData.buffer.asUint8List();
var bs64 = base64Encode(pngBytes);
debugPrint(bs64.length.toString());
return pngBytes;
} catch (exception) {}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(children: [
RepaintBoundary(
key: _renderObjectKey,
child: QrImage(
data: "some text",
size: 300.0,
version: 10,
backgroundColor: Colors.white,
),
),
RaisedButton(onPressed: () {
_getWidgetImage();
})
]));
}
Future<Uint8List> toQrImageData(String text) async {
try {
final image = await QrPainter(
data: text,
version: QrVersions.auto,
gapless: false,
color: hexToColor('#000000'),
emptyColor: hexToColor('#ffffff'),
).toImage(300);
final a = await image.toByteData(format: ImageByteFormat.png);
return a.buffer.asUint8List();
} catch (e) {
throw e;
}
}
Я писал тот же ответ, проверка моего ответа заняла немного времени, вы выиграли! Если у меня будет время в будущем, я напишу еще один ответ, в котором попытаюсь использовать класс
QrPainter
в плагине и использовать классPictureRecorder
для записи результата холста из него.