将生成的条形码保存并打印为图像

Save and print generated barcode as image

我正在使用 barcode_widget 生成条形码和二维码。但我还需要打印并保存代码。

我目前生成条码和二维码的代码如下:

    Center(
      child: BarcodeWidget(
        data: widget.product.productId!,
        barcode: Barcode.code128(),
        width: 200,
        height: 200,
        drawText: false,
      ),
    ),

    BarcodeWidget(
      data: widget.product.productId!,
      barcode: Barcode.qrCode(),
    ),

两者都在一个列中,我有两个按钮,分别称为“保存”和“打印”。那么如何保存和打印生成的代码呢?

您可以使用RepaintBoundary
请按照以下步骤操作:

1.创建密钥。

  GlobalKey _screenShotKey = GlobalKey();

2。将条形码包裹在重绘边界中并附加密钥

RepaintBoundary(
 key: _screenShotKey,
 child: Center(
      child: BarcodeWidget(
        data: widget.product.productId!,
        barcode: Barcode.code128(),
        width: 200,
        height: 200,
        drawText: false,
      ),
    )
)

3。将 dart:ui 导入为 ui

import 'dart:ui' as ui;

4.创建一个方法来截取小部件的屏幕截图并保存它。

  Future<File> takeScreenshot() async {
    RenderRepaintBoundary boundary =
        _screenShotKey.currentContext.findRenderObject();
    ui.Image image = await boundary.toImage();
    ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    Uint8List pngBytes = byteData.buffer.asUint8List();
    final tempPath = (await getTemporaryDirectory()).path;
    final path = tempPath + "qr.png";
    File imgFile = File(path);
    return imgFile.writeAsBytes(pngBytes);
  }

5.保存在 gallery/photos 应用程序中;使用 GallerySaver package

 void save() async {
    takeScreenshot().then((value) async {
      bool saved = await GallerySaver.saveImage(value.path);
      print(saved);
    }).catchError((onError) {});
  }