Flutter中使用flutter_barcode_scanner扫描指定数量条码后关闭相机
解决方案
要实现扫描指定数量条码后关闭相机并返回页面,核心是管理条码流的订阅对象——通过取消订阅停止相机扫描,再通过路由导航返回原页面。具体实现如下:
- 定义
StreamSubscription变量保存条码流的订阅实例,用于后续终止扫描; - 当扫描数量达标时,先取消订阅关闭相机,再调用
Navigator.pop返回原页面。
修改后的完整代码示例:
StreamSubscription? _barcodeSubscription; List<String> list = []; scanBarcode(BuildContext context) { _barcodeSubscription = FlutterBarcodeScanner.getBarcodeStreamReceiver( "#ff6666", "Cancel", false, ScanMode.DEFAULT, )!.listen( (barcode) { // 过滤空条码与重复条码,避免无效计数 if (barcode.isNotEmpty && !list.contains(barcode)) { setState(() { list.add(barcode); }); if (list.length == 10) { // 1. 取消订阅,终止相机扫描流 _barcodeSubscription?.cancel(); // 2. 返回原页面,可携带扫描结果列表 Navigator.pop(context, list); } } }, ); }
关键说明
StreamSubscription是listen方法的返回值,调用cancel()会终止条码流监听,触发flutter_barcode_scanner内部的相机关闭逻辑;- 增加条码过滤逻辑,避免空值或重复条码干扰计数准确性;
Navigator.pop(context, list)可将扫描完成的列表传递回原页面,方便后续业务处理。
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

