Flutter文档扫描与识别插件scanned的使用
Flutter 文档扫描与识别插件 scannned 的使用
支持平台
平台 | 检查连接性 | 监听变化 |
---|---|---|
Android | ✅ | ✅ |
iOS | ✅ | ✅ |
macOS | ❌ | ❌ |
Linux | ❌ | ❌ |
Windows | ❌ | ❌ |
Web | ❌ | ❌ |
准备
iOS
Info.plist
<key>NSCameraUsageDescription</key>
<string>您的描述</string>
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
Android
AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA" />
<application>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
在 pubspec.yaml
文件中添加依赖:
dependencies:
scanned: [最新版本]
Flutter/Dart
import 'package:scanned/scanned.dart';
创建一个 ScanController
对象来控制扫描器的行为:
ScanController scanController = ScanController();
Scanner(
controller: scanController,
scanAreaScale: .65,
scanLineColor: Colors.blue,
onCapture: (data) async {
await stopCamera();
if (data.isNotEmpty) await onScanned(data);
await Future.delayed(Duration(
milliseconds: ((reactivateTime ?? Configs.defaultCameraScanIdleTimeout) * 1000)
.toInt()));
await startCamera();
}
)
使用 ScanController
控制摄像头和手电筒:
// 切换手电筒并获取其状态作为布尔值
final bool turnedOn = scanController.toggleTorchMode();
// 打开手电筒
await scanController.turnOn();
// 关闭手电筒
await scanController.turnOff();
// 开始或恢复摄像头
await scanController.resume();
// 暂停摄像头
await scanController.pause();
// 暂停摄像头并关闭手电筒
scanController.pause(turnOffFlash: true);
完整示例代码
以下是一个完整的示例代码,展示了如何使用 scanned
插件进行扫描。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:scanned/scanned.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _scannedPlugin = Scanned();
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 平台消息是异步的,因此我们在异步方法中初始化。
Future<void> initPlatformState() async {
String platformVersion;
// 平台消息可能会失败,所以我们使用 try/catch PlatformException。
// 我们还处理消息可能返回 null 的情况。
platformVersion = '无法获取平台版本。';
// 如果在异步平台消息仍在飞行时从树中移除了小部件,我们希望丢弃回复而不是调用
// setState 来更新我们的不存在的外观。
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Text('运行在: $_platformVersion\n'),
),
),
);
}
}
更多关于Flutter文档扫描与识别插件scanned的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文档扫描与识别插件scanned的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
scanned
是一个用于Flutter的文档扫描与识别插件,它允许你在应用中集成文档扫描功能,并提取扫描文档中的文本。使用这个插件,你可以轻松地实现像扫描身份证、发票、合同等文档的功能,并进一步处理提取的文本。
以下是使用 scanned
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 scanned
插件的依赖:
dependencies:
flutter:
sdk: flutter
scanned: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 scanned
插件:
import 'package:scanned/scanned.dart';
3. 初始化插件
在使用插件之前,你需要先初始化它:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Scanned.initialize();
runApp(MyApp());
}
4. 使用插件进行文档扫描
你可以使用 Scanned
插件提供的 scanDocument
方法来扫描文档。以下是一个简单的示例:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Document Scanner'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 启动文档扫描
final result = await Scanned.scanDocument();
if (result != null) {
// 处理扫描结果
print('Scanned Document: ${result.path}');
print('Extracted Text: ${result.text}');
} else {
print('Scanning cancelled');
}
},
child: Text('Scan Document'),
),
),
),
);
}
}
5. 处理扫描结果
scanDocument
方法返回一个 ScannedDocument
对象,其中包含扫描文档的路径和提取的文本。你可以根据需要处理这些信息。
6. 处理权限
在 Android 和 iOS 上,文档扫描可能需要相机权限。你需要在 AndroidManifest.xml
和 Info.plist
中添加相应的权限声明。
- Android: 在
AndroidManifest.xml
中添加:
<uses-permission android:name="android.permission.CAMERA" />
- iOS: 在
Info.plist
中添加:
<key>NSCameraUsageDescription</key>
<string>We need access to your camera to scan documents.</string>