qr_code_scanner:用的最多的扫码库,也支持开关灯,效果不错推荐,不过其默认在ios
端为swift
代码,原生默认为Object-c
的需要桥接
qr_flutter:一款不错的二维码生成工具,通过传递字符串可以直接生成 Widget
flutter-scankit:华为的扫码库,对于一些小的、有损坏、污点的二维码,有扫描优化,唯一的缺陷就是库太老,除了案例,其他项目基本上用不了直接报错,如果能解决报错还是推荐的,个人比较懒,就不解决了^_^
qr_code_scanner扫码
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
class ScanPage extends StatefulWidget {
final Function(Barcode? result)? completed;
const ScanPage({Key? key, this.completed,}) : super(key: key);
@override
State<ScanPage> createState() => _ScanPageState();
}
class _ScanPageState extends State<ScanPage> {
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
QRViewController? _controller;
@override
void reassemble() {
super.reassemble();
_controller?.resumeCamera();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color.fromRGBO(0, 0, 0, 0.7), //默认颜色,太白了不好看
body: Stack(
children: [
QRView(
key: qrKey,
onQRViewCreated: _onQRViewCreated,
),
Positioned(
bottom: 60,
left: 0,
right: 0,
child: SafeArea(
child: CupertinoButton(
onPressed: () {
_controller?.toggleFlash();
},
child: Container(
alignment: Alignment.center,
height: 64,
child: Image.asset('images/flash_light.png'),
),
),
),
),
SafeArea(
child: GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: const SizedBox(
width: 60,
height: 44,
child: Icon(
Icons.arrow_back_ios_new,
color: Colors.white,
size: 26,
),
),
),
),
],
),
);
}
void _onQRViewCreated(QRViewController controller) {
_controller = controller;
controller.scannedDataStream.listen((result) {
//print(result.code);
_controller!.stopCamera();
Navigator.of(context).pop();
if (widget.completed != null) {
widget.completed!(result);
}
});
}
@override
void dispose() {
_controller!.dispose();
super.dispose();
}
}
qr_flutter生成二维码
QrImage(
data: "1234567890", //数据
//二维码版本,二维码有很多个版本,不同版本会有所不同,可能会影响一些或者扫描库扫描,碰到问题可以切换版本
version: QrVersions.auto,
size: 200.0, //大小
),
QrImage(
data: 'This QR code will show the error state instead',
version: 1,
size: 320,
gapless: false, //无间隙二维码
//生成失败后的widget显示
errorStateBuilder: (cxt, err) {
return Container(
child: Center(
child: Text(
"Uh oh! Something went wrong...",
textAlign: TextAlign.center,
),
),
);
},
)
今天的文章flutter-qr_code_scanner、qr_flutter(扫描、生成二维码)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17152.html