在Flutter中使用蓝牙打印机打印图像



我想先打印的截图Flutter的页面到目前为止,我已经到了需要将图像解析为打印它的函数的部分,下面是代码:

第一页

_screenshot() {
screenshotController.capture().then((File image) {
//Capture Done
setState(() {
_screenshot = image;
});
print('Successful Screenshot => $_screenshot');
Navigator.push(
context, MaterialPageRoute(builder: (context) => Print(_screenshot)));}

这个页面将整个页面截图并将截图推送到第二个屏幕。下面是第二个屏幕:

第二页

class Print extends StatefulWidget {
final File screenshot;
Print(this.screenshot);
@override
_PrintState createState() => _PrintState();
}

在这里,我从第一页初始化图像,然后我创建了打印函数,应该打印票据,但我得到一个错误:

Future<Ticket> _ticket(PaperSize paper) async {
final ticket = Ticket(paper);

//this is a working option, but I don't want to load from assets, but load screenshot file from first page
//final ByteData data = await rootBundle.load(assets/store.png');
final File img = await rootBundle.load(widget.screenshot); //here parse the image from first page **ERROR HERE**
final Uint8List bytes = data.buffer.asUint8List();
final Image image = decodeImage(bytes);
ticket.image(image);
return ticket;
}

我得到一个错误,字节数据不能分配给变量类型文件我能理解,但我该怎么做呢?我正在使用esc_pos_bluetooth: ^0.2.8蓝牙打印库。

您不需要从rootBundle加载数据,您可以使用File类中的readAsBytes()类方法返回Uint8List

Uint8List bytes = await widget.screenshot.readAsBytes();

你的最终代码应该看起来像。

Future<Ticket> _ticket(PaperSize paper) async {
final ticket = Ticket(paper);
final Uint8List bytes = await widget.screenshot.readAsBytes();
final Image image = decodeImage(bytes);
ticket.image(image);
return ticket;
}

最新更新