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

1 回复

更多关于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.xmlInfo.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>
回到顶部