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

运行zxing2包二维码识别示例时遭遇文件无法打开异常的求助

解决Flutter中zxing2识别二维码时的FileSystemException错误

这个FileSystemException: Cannot open file, path = 'assets/image/download.png'错误的核心原因很明确:你用File类去访问Flutter assets目录里的文件,但assets是打包在应用程序包中的资源,并非设备文件系统上的真实路径,所以File根本找不到它。下面是具体的修复方案:

1. 先确认pubspec.yaml的Assets配置正确

首先要保证你的pubspec.yaml已经正确声明了这个资源文件,否则Flutter打包时不会把它包含进应用:

flutter:
  assets:
    # 单个文件声明
    - assets/image/download.png
    # 或者直接声明整个目录(适合多资源场景)
    - assets/image/

⚠️ 注意:assets字段必须缩进在flutter:下方,缩进要准确(通常是2个空格),否则配置不会生效。改完后记得运行flutter pub get让配置同步。

2. 改用Flutter的Asset加载机制读取文件

替换掉原来用File读取的方式,改用Flutter提供的rootBundle来加载assets资源:

首先补充导入相关包:

import 'dart:io';
import 'package:image/image.dart' as img;
import 'package:zxing2/qrcode.dart';
// 新增这个包用于加载assets
import 'package:flutter/services.dart';

然后把你的getQRtext改成异步函数(因为assets加载是异步操作):

Future<String> getQRtext() async {
  // 从assets加载图片的字节数据
  final assetBytes = await rootBundle.load('assets/image/download.png');
  final imageBytes = assetBytes.buffer.asUint8List();

  // 后续的二维码识别逻辑保持不变
  var image = img.decodePng(imageBytes)!;
  LuminanceSource source = RGBLuminanceSource(
    image.width, 
    image.height, 
    image.getBytes(format: img.Format.abgr).buffer.asInt32List()
  );
  var bitmap = BinaryBitmap(HybridBinarizer(source));
  var reader = QRCodeReader();
  var result = reader.decode(bitmap);
  
  return result.text;
}

调用这个函数时需要用await:

// 示例:在StatefulWidget的initState里调用
@override
void initState() {
  super.initState();
  _fetchQRContent();
}

void _fetchQRContent() async {
  try {
    String qrContent = await getQRtext();
    print('识别到的二维码内容:$qrContent');
    // 这里处理识别结果
  } catch (e) {
    print('识别失败:$e');
  }
}

3. 额外检查项

  • 确认路径和文件名的大小写完全匹配:Android系统区分大小写,如果实际文件是Download.png但代码里写的是download.png,就会找不到。
  • 确认assets目录结构正确:项目根目录下确实存在assets/image/download.png,没有拼写错误或层级错误。

内容的提问来源于stack exchange,提问作者Newbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:57:36