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

Flutter中不使用Firebase ML Kit从本地图片读取二维码如何实现

Flutter 本地图片二维码识别实现方案(无需Firebase ML Kit)

1. 新增依赖

在pubspec.yaml的dependencies下添加二维码识别库,这里推荐使用flutter_zxing,纯端侧实现无需接入任何云服务或Firebase套件:

dependencies:
  flutter:
    sdk: flutter
  image_picker: ^0.8.4+1 # 你已有的依赖
  flutter_zxing: ^1.5.0 # 新增二维码识别依赖

添加完成后执行flutter pub get安装依赖。

2. 基础配置调整

安卓端需要将android/app/build.gradle中的minSdkVersion调整为19及以上:

android {
    defaultConfig {
        minSdkVersion 19 // 修改为19或更高版本
    }
}

iOS端无需额外特殊配置。

3. 新增二维码识别逻辑

新增独立的图片二维码解析方法,直接传入图片文件即可返回识别结果:

import 'package:flutter_zxing/flutter_zxing.dart';

// 从图片文件识别二维码,识别成功返回内容,识别失败返回null
Future<String?> parseQrFromFile(File imageFile) async {
  final result = await FlutterZxing().readBarcodeImagePath(
    path: imageFile.path,
  );
  return result?.text;
}

4. 整合到现有代码

你可以选择选中图片后自动识别,也可以新增按钮手动触发识别,以下是修改后的完整示例代码:

File? _image;
String? qrResult; // 存储识别到的二维码内容

@override
Widget build(BuildContext context) {
  return Container(
    child: Column(
      children: [
        ElevatedButton.icon(
          style: ElevatedButton.styleFrom(
              primary: Theme.of(context).buttonColor
          ),
          onPressed: () async => pickImage(),
          icon: Icon(Icons.image),
          label: Text("从相册选择图片"),
        ),
        // 展示选中的图片
        if (_image != null) Image.file(_image!, height: 200),
        // 展示识别结果
        if (qrResult != null) Text("识别结果:$qrResult"),
      ],
    ),
  );
}

Future<void> pickImage() async {
  await Permission.storage.request();
  var status = await Permission.storage.status;

  if (status.isGranted) {
    final pickedFile =
        await ImagePicker().pickImage(source: ImageSource.gallery);
    if (pickedFile != null) {
      final imageFile = File(pickedFile.path);
      // 识别图片中的二维码
      final result = await parseQrFromFile(imageFile);
      setState(
        () {
          _image = imageFile;
          qrResult = result ?? "未识别到有效二维码";
        },
      );
    }
  }
}

Future<String?> parseQrFromFile(File imageFile) async {
  final result = await FlutterZxing().readBarcodeImagePath(
    path: imageFile.path,
  );
  return result?.text;
}

注意事项

  • 仅支持识别内容清晰、完整的二维码图片,模糊、裁切不全的图片会导致识别失败
  • 如需识别其他格式的条码,可通过调整flutter_zxing的识别格式参数实现

内容的提问来源于stack exchange,提问作者Code With Bishal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:54:03