字
字节笔记本
2026年2月22日
flutter_ios_doc_scanner:Flutter iOS 文档扫描插件
本文介绍 flutter_ios_doc_scanner,一个 Flutter iOS 文档扫描插件。该项目封装了 iOS 原生的文档扫描功能,让 Flutter 开发者能够轻松集成文档扫描能力到应用中。
项目简介
flutter_ios_doc_scanner 是一个开源的 Flutter 插件项目,由 Dhaval Patel 开发维护。该插件基于 iOS VisionKit 框架的 VNDocumentCameraViewController 实现,提供了原生的文档扫描体验。截至目前,该项目在 GitHub 上已获得 3 stars,采用 MIT 许可证开源。
核心特性
- 原生 iOS 文档扫描:基于 VisionKit 框架,提供与 iOS 原生一致的扫描体验
- 多页扫描支持:支持连续扫描多页文档
- 自动边缘检测:自动识别文档边缘并进行透视校正
- 图片输出:扫描结果以图片文件路径列表形式返回
- Flutter 无缝集成:通过 Platform Channel 与 Flutter 框架通信
技术栈
- Swift (38.7%) - iOS 原生插件实现
- Dart (38.2%) - Flutter 端 API 封装
- Ruby (17.2%) - CocoaPods 配置
- Objective-C (5.9%) - 桥接代码
安装指南
前置要求
- Flutter SDK >= 2.0
- iOS 13.0+(VisionKit 要求)
- Xcode 11+
安装步骤
在 pubspec.yaml 中添加依赖:
yaml
dependencies:
flutter_ios_doc_scanner: ^0.0.1然后运行:
bash
flutter pub getiOS 配置
确保 ios/Podfile 中平台版本不低于 13.0:
ruby
platform :ios, '13.0'使用示例
基础用法
dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_ios_doc_scanner/flutter_ios_doc_scanner.dart';
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<String> _filePaths;
final _plugin = FlutterIOSDocScanner();
bool _processing = false;
PlatformException _exception;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('文档扫描示例'),
),
body: Column(
children: [
if (_processing == false)
FlatButton(
onPressed: () async {
setState(() => _processing = true);
try {
final files = await _plugin.pickDocument("");
setState(() {
_filePaths = files;
});
} on PlatformException catch (e) {
setState(() {
_exception = e;
});
}
setState(() => _processing = false);
},
child: Text('扫描文档'),
)
else
Center(child: CircularProgressIndicator()),
if (_exception != null) ...[
Text('错误'),
Text(_exception.code),
Text(_exception.message)
],
if (_filePaths != null)
Expanded(
child: ListView.builder(
itemCount: _filePaths.length,
itemBuilder: (context, index) => Image.file(
File(_filePaths[index].replaceFirst('file://', ''))
)
)
)
],
),
),
);
}
}API 参考
FlutterIOSDocScanner
pickDocument
启动文档扫描器并返回扫描结果。
dart
Future<List<String>> pickDocument(String title)| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| title | String | 否 | 扫描界面标题 |
返回值:扫描生成的图片文件路径列表(file:// 协议)
注意事项
- iOS 版本限制:该插件仅支持 iOS 13.0+,因为 VisionKit 的 VNDocumentCameraViewController 在此版本引入
- 真机测试:文档扫描功能需要在真机上测试,模拟器不支持
- 权限配置:需要在
Info.plist中添加相机权限说明:xml<key>NSCameraUsageDescription</key> <string>需要相机权限来扫描文档</string>
项目链接
- GitHub 仓库:https://github.com/livebird/flutter_ios_doc_scanner
- 示例代码:https://github.com/livebird/flutter_ios_doc_scanner/tree/main/example
- 许可证:MIT License
分享: