Flutter信用卡扫描插件credit_card_scanner的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter信用卡扫描插件 credit_card_scanner 的使用

简介

credit_card_scanner 是一个用于准确快速扫描借记卡和信用卡的 Flutter 插件。以下是该插件的一些主要特点:

  • 完全离线扫描:确保数据安全,不依赖网络。
  • 全面扫描:可以扫描卡号、过期日期、持卡人姓名和发卡机构。
  • 高性能和高准确性:基于 Google 的机器学习模型。
  • 自动校验:使用卡校验算法自动检查卡号错误。
  • 参数控制:支持调整速度和准确性的平衡。
  • 简单强大的 API:易于使用且功能强大。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  credit_card_scanner: ^<latest-version>

获取最新版本号 点击这里

使用

基本用法

导入插件并调用 scanCard 方法:

import 'package:credit_card_scanner/credit_card_scanner.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  CardDetails? _cardDetails;

  Future<void> scanCard() async {
    final CardDetails? cardDetails = await CardScanner.scanCard();
    if (!mounted || cardDetails == null) return;
    setState(() {
      _cardDetails = cardDetails;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('credit_card_scanner app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  scanCard();
                },
                child: Text('Scan Card'),
              ),
              Text(_cardDetails?.toString() ?? 'No card scanned yet'),
            ],
          ),
        ),
      ),
    );
  }
}

扫描选项

如果你需要获取持卡人姓名和发卡机构,可以指定扫描选项:

import 'package:credit_card_scanner/credit_card_scanner.dart';

Future<void> scanCardWithOptions() async {
  final CardDetails? cardDetails = await CardScanner.scanCard(
    scanOptions: CardScanOptions(
      scanCardHolderName: true,
      scanCardIssuer: true,
    ),
  );
  if (!mounted || cardDetails == null) return;
  setState(() {
    _cardDetails = cardDetails;
  });
}

示例输出

Card Number = 5173949117389006
Expiry Date = 11/26
Card Issuer = mastercard
Card Holder Name = PAUL SAMUELSON

iOS 要求

  • 最低目标版本应为 12.0.0 及以上。
  • 注释掉 Podfile 中的 use_frameworks! 行。你可以在 your_flutter_project/ios/Podfile 中找到这个文件。

文档和示例

更多文档和示例请参阅 官方文档

完整示例

以下是一个完整的示例应用,展示了如何使用 credit_card_scanner 插件:

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:credit_card_scanner/credit_card_scanner.dart';
import 'scan_option_configure_widget/scan_option_configure_widget.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  CardDetails? _cardDetails;
  CardScanOptions scanOptions = const CardScanOptions(
    scanCardHolderName: true,
    validCardsToScanBeforeFinishingScan: 5,
    possibleCardHolderNamePositions: [
      CardHolderNameScanPosition.aboveCardNumber,
    ],
  );

  Future<void> scanCard() async {
    final CardDetails? cardDetails = await CardScanner.scanCard(scanOptions: scanOptions);
    if (!mounted || cardDetails == null) return;
    setState(() {
      _cardDetails = cardDetails;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('credit_card_scanner app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              ElevatedButton(
                onPressed: () async {
                  scanCard();
                },
                child: const Text('Scan Card'),
              ),
              Text(_cardDetails?.toString() ?? 'No card scanned yet'),
              Expanded(
                child: OptionConfigureWidget(
                  initialOptions: scanOptions,
                  onScanOptionChanged: (newOptions) => scanOptions = newOptions,
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

希望这个示例对你有帮助!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter项目中使用credit_card_scanner插件的详细代码示例。请注意,credit_card_scanner插件的具体实现和功能可能会根据插件的更新而有所变化,因此请参考最新的插件文档和示例。

首先,确保你已经在pubspec.yaml文件中添加了credit_card_scanner依赖:

dependencies:
  flutter:
    sdk: flutter
  credit_card_scanner: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,你可以在你的Flutter应用中实现信用卡扫描功能。以下是一个基本的示例,展示如何使用credit_card_scanner插件:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'CreditCard Scanner Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CreditCardScannerScreen(),
    );
  }
}

class CreditCardScannerScreen extends StatefulWidget {
  @override
  _CreditCardScannerScreenState createState() => _CreditCardScannerScreenState();
}

class _CreditCardScannerScreenState extends State<CreditCardScannerScreen> {
  String? cardNumber;
  String? cardHolderName;
  String? expiryDate;
  String? cvv;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('CreditCard Scanner Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Card Number:', style: TextStyle(fontSize: 18)),
            Text(cardNumber ?? 'N/A', style: TextStyle(fontSize: 16)),
            SizedBox(height: 16),
            Text('Card Holder Name:', style: TextStyle(fontSize: 18)),
            Text(cardHolderName ?? 'N/A', style: TextStyle(fontSize: 16)),
            SizedBox(height: 16),
            Text('Expiry Date:', style: TextStyle(fontSize: 18)),
            Text(expiryDate ?? 'N/A', style: TextStyle(fontSize: 16)),
            SizedBox(height: 16),
            Text('CVV:', style: TextStyle(fontSize: 18)),
            Text(cvv ?? 'N/A', style: TextStyle(fontSize: 16)),
            SizedBox(height: 24),
            ElevatedButton(
              onPressed: () async {
                try {
                  CreditCardResult result = await CreditCardScanner().scanCard();
                  setState(() {
                    cardNumber = result.cardNumber;
                    cardHolderName = result.cardHolderName;
                    expiryDate = result.expiryDate;
                    cvv = result.cvv;
                  });
                } catch (e) {
                  print('Error scanning credit card: $e');
                }
              },
              child: Text('Scan Credit Card'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它使用credit_card_scanner插件来扫描信用卡信息。我们定义了一个CreditCardScannerScreen状态类,并在其中显示扫描结果。当用户点击“Scan Credit Card”按钮时,将触发扫描操作,并将结果更新到UI上。

请注意,CreditCardResult类及其属性(如cardNumbercardHolderNameexpiryDatecvv)可能根据插件的实现而有所不同。因此,请务必参考插件的官方文档以获取最新的API信息。

另外,由于实际使用中可能涉及隐私和安全问题,请确保你遵循相关的隐私政策和安全最佳实践,例如在扫描前获取用户的明确同意,以及安全地存储和处理敏感信息。

回到顶部