Flutter文档扫描插件document_scanner_kit的使用

Flutter文档扫描插件document_scanner_kit的使用

Document Scanner Kit

coverage style: very_good_analysis License: MIT

由Very Good CLI 🤖生成。

插件正在开发中。

这是一个使用MLKit(Android)和VisionKit(iOS)进行文档扫描的Flutter插件。

项目设置

请遵循以下步骤在Android和iOS上设置您的Flutter项目。

Android
要求
  • minSdkVersion: 21
  • targetSdkVersion: 33
  • compileSdkVersion: 34
iOS
最低版本配置

确保您的应用满足在iOS设备上运行的最低版本要求。在ios/Podfile文件中,确保iOS平台版本至少为13.0:

platform :ios, '13.0'
权限配置

在应用的Info.plist文件中添加一个带有键NSCameraUsageDescription的字符串属性,并将值设置为描述您的应用为什么需要相机访问的原因。

<key>NSCameraUsageDescription</key>
<string>相机使用是必需的</string>

使用

import 'package:document_scanner_kit/document_scanner_kit.dart' as DocumentScanner;

// 在iOS上检查权限,Android不需要相机使用权限。

try {
    final result = await DocumentScanner.scan();
    if(result != null) {
        // 对路径进行处理。
    } else {
        // 扫描过程已取消
    }
} catch (e) {
    // 处理错误
}

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用document_scanner_kit插件进行文档扫描。

import 'dart:io';

import 'package:document_scanner_kit/document_scanner_kit.dart';
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(home: HomePage());
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List<String>? _scannedImages;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('DocumentScannerKit 示例')),
      body: Center(
        child: SingleChildScrollView(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.min,
            children: [
              if (_scannedImages == null)
                const SizedBox.shrink()
              else
                Column(
                  children: [
                    for (final path in _scannedImages!) Image.file(File(path)),
                  ],
                ),
              const SizedBox(height: 16),
              ElevatedButton(
                  onPressed: () async {
                    if (!context.mounted) return;
                    try {
                      final result = await DocumentScanner.scan();
                      setState(() => _scannedImages = result);
                    } catch (error) {
                      if (!context.mounted) return;
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(
                          backgroundColor: Theme.of(context).primaryColor,
                          content: Text('$error'),
                        ),
                      );
                    }
                  },
                  child: const Text('扫描文档')),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter文档扫描插件document_scanner_kit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文档扫描插件document_scanner_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


document_scanner_kit 是一个用于 Flutter 的文档扫描插件,它允许你在移动应用中集成文档扫描功能。这个插件通常提供了自动边缘检测、图像校正和保存扫描结果等功能。以下是使用 document_scanner_kit 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 document_scanner_kit 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  document_scanner_kit: ^1.0.0  # 请检查最新版本号

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在需要使用插件的地方导入 document_scanner_kit

import 'package:document_scanner_kit/document_scanner_kit.dart';

3. 初始化扫描器

在使用扫描功能之前,通常需要初始化扫描器。你可以在 initState 方法中进行初始化:

class ScannerScreen extends StatefulWidget {
  @override
  _ScannerScreenState createState() => _ScannerScreenState();
}

class _ScannerScreenState extends State<ScannerScreen> {
  @override
  void initState() {
    super.initState();
    DocumentScannerKit.initialize();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Document Scanner'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 触发扫描
            _startScan();
          },
          child: Text('Start Scan'),
        ),
      ),
    );
  }

  void _startScan() async {
    // 启动扫描
    final result = await DocumentScannerKit.startScan();

    if (result != null) {
      // 处理扫描结果
      // result 通常包含扫描后的图像路径
      print('Scanned image path: ${result['imagePath']}');
    } else {
      // 用户取消了扫描
      print('Scan was cancelled');
    }
  }
}

4. 处理扫描结果

_startScan 方法中,你可以通过 DocumentScannerKit.startScan() 启动扫描器。扫描完成后,它会返回一个包含扫描图像路径的结果。

你可以使用这个路径来显示或处理扫描后的图像。

5. 自定义配置(可选)

document_scanner_kit 可能提供了自定义配置选项,例如设置扫描器的UI样式、边缘检测灵敏度等。你可以根据插件的文档进行配置。

DocumentScannerKit.initialize(
  config: DocumentScannerConfig(
    enableAutoSnap: true,
    enableCropGuidance: true,
    // 其他配置项
  ),
);

6. 权限处理

确保你已经在 AndroidManifest.xmlInfo.plist 中添加了必要的摄像头和存储权限。

Android:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

iOS:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera to scan documents.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to save scanned documents.</string>

7. 处理权限请求

在 Flutter 中,你需要使用 permission_handler 等插件来请求运行时权限。确保在启动扫描器之前,用户已经授予了必要的权限。

import 'package:permission_handler/permission_handler.dart';

void _checkPermissions() async {
  var status = await Permission.camera.status;
  if (!status.isGranted) {
    await Permission.camera.request();
  }
}
回到顶部