我想建立一个基于flutter web的PWA,它依赖于扫描二维码和访问用户的当前位置。
根据我对这两个功能的了解,目前没有可用的软件包。
然而,为了获取用户的位置,有一个stackoverflow线程(为flutter Web获取用户位置(提供了一个解决方案。
所以我想知道是否有类似的解决方案来解决二维码扫描问题?
遗憾的是,我对web和javascript开发不是很熟悉。因此,如有任何帮助,我们将不胜感激。
在这两篇文章之后,我设法在我的flutter web应用程序中使用了jsQR库。
https://medium.com/@mk.pyts/how-to-acess-webcam-video-stream-in-flutter-for-web-1bdc74f2e9c7
https://medium.com/flutter-community/using-javascript-code-in-flutter-web-903de54a2000
https://github.com/cozmo/jsQR
通过这个,我现在可以在flutter网络中扫描二维码了。
我使用了库ai_barcode
。
插件的文档是terible,所以我在这里发布我的小工具:
import 'package:ai_barcode/ai_barcode.dart';
import 'package:flutter/material.dart';
class _BarcodeScannerWidget extends StatefulWidget {
const _BarcodeScannerWidget(this.resultCallback);
final void Function(String result) resultCallback;
@override
State<StatefulWidget> createState() {
return _AppBarcodeScannerWidgetState();
}
}
class _AppBarcodeScannerWidgetState extends State<_BarcodeScannerWidget> {
late ScannerController _scannerController;
@override
void initState() {
super.initState();
_scannerController = ScannerController(scannerResult: (result) {
widget.resultCallback(result);
}, scannerViewCreated: () {
final TargetPlatform platform = Theme.of(context).platform;
if (TargetPlatform.iOS == platform) {
Future.delayed(const Duration(seconds: 2), () {
_scannerController
..startCamera()
..startCameraPreview();
});
} else {
_scannerController
..startCamera()
..startCameraPreview();
}
});
}
@override
void dispose() {
super.dispose();
_scannerController
..stopCameraPreview()
..stopCamera();
}
@override
Widget build(BuildContext context) {
return PlatformAiBarcodeScannerWidget(
platformScannerController: _scannerController,
);
}
}
还可以从插件存储库中添加jsQR.js。
ai_barcode: ^3.0.1
并将此行添加到index.html:
<script src="jsQR.js" type="application/javascript"></script> <!-- Add this line -->
<script src="main.dart.js" type="application/javascript"></script>