这是一个小部件,具有每次我们扫描二维码时触发的功能。
import 'package:qr_code_scanner/qr_code_scanner.dart';
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Expanded(
flex: 4,
child: QRView(
key: qrKey,
onQRViewCreated: _onQRViewCreated,
overlay: QrScannerOverlayShape(
borderColor: Colors.red,
borderRadius: 10,
borderLength: 30,
borderWidth: 10,
cutOutSize: 300,
),
),
),
Run Code Online (Sandbox Code Playgroud)
在功能上,我想导航到下一个屏幕。
void _onQRViewCreated(QRViewController controller) {
this.controller = controller;
controller.scannedDataStream.listen((scanData) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
});
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是,监听事件触发多次,第一次成功扫描数据后是否可以停止此功能?我试试
controller.scannedDataStream.first;
Run Code Online (Sandbox Code Playgroud)
但是在扫描真实数据时返回空字符串并且不会触发。
我需要点击 40 次才能从第二条路线返回到 QR 扫描仪小部件。谢谢!
如果有人仍然遇到这个问题,请尝试这个解决方案:)它对我来说效果很好!
onQRViewCreated: (QRViewController qrViewController) {
this.qrViewController = qrViewController;
qrViewController.scannedDataStream.listen((qrData) {
qrViewController.pauseCamera();
final String qrCode = qrData.code;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondPage(
qrCode: '$qrCode',
))).then((value) => qrViewController.resumeCamera());
});
}
Run Code Online (Sandbox Code Playgroud)
小智 6
为了将来参考,我发现暂停相机效果更好:)
void _onQRViewCreated(QRViewController controller) {
this.controller = controller;
controller.scannedDataStream.listen((scanData) {
qrText = scanData;
SecondPageRoute();
});
}
SecondPageRoute() async {
controller?.pauseCamera();
var value = await Navigator.push(context,
MaterialPageRoute(builder: (context) {
return SecondPage(qrText);
})).then((value) => controller.resumeCamera());
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您只需添加一个哨兵即可
void _onQRViewCreated(QRViewController controller) {
this.controller = controller;
bool scanned = false;
controller.scannedDataStream.listen((scanData) {
if (!scanned) {
scanned = true;
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2657 次 |
| 最近记录: |