You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用flutter_barcode_scanner扫描指定数量条码后关闭相机

解决方案

要实现扫描指定数量条码后关闭相机并返回页面,核心是管理条码流的订阅对象——通过取消订阅停止相机扫描,再通过路由导航返回原页面。具体实现如下:

  1. 定义StreamSubscription变量保存条码流的订阅实例,用于后续终止扫描;
  2. 当扫描数量达标时,先取消订阅关闭相机,再调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:40:19