先看效果:
方法:
web布局就略过,自行练习,只讲重点!
此项目需要用到三个依赖库:
- zxing2: ^0.1.0
- image: ^3.1.0
- qr_flutter: ^4.0.0
zxing2库:用于将二维码转成Bytes集合。
image库:zxing2库转Bytes集合过程会用到。
qr_flutter库:用于web上展示二维码,即:显示二维码的组件。
qr_flutter库的使用参考pub上例子就行。重点在如何下载成图片:
首先通过zxing2库和image库,将二维码信息转成Bytes集合:
var qrcode = Encoder.encode(value, ErrorCorrectionLevel.h);
var matrix = qrcode.matrix;
var scale = 4;
var image = img.Image(matrix.width * scale, matrix.height * scale);
for (var x = 0; x < matrix.width; x++) {
for (var y = 0; y < matrix.height; y++) {
if (matrix.get(x, y) == 1) {
img.fillRect(image, x * scale, y * scale, x * scale + scale,
y * scale + scale, 0xFF000000);
}
}
}
var pngBytes = img.encodePng(image);
然后我们拿到二维码图片Bytes集合后如何进行下载操作?
通过html.Blob存放二进制数据,再将二进制数据通过createObjectUrlFromBlob转成URL
然后创建一个a标签,点击即可下载。
final blob = html.Blob([pngBytes]);
final url = html.Url.createObjectUrlFromBlob(blob);
final anchor = html.document.createElement('a') as html.AnchorElement
..href = url
..style.display = 'none'
..download = '$value.png';
html.document.body.children.add(anchor);
// download
anchor.click();
// cleanup
html.document.body.children.remove(anchor);
html.Url.revokeObjectUrl(url);