flutter_credit_card_scanner
기기 카메라를 사용하여 신용카드 정보를 스캔하고 추출하는 Flutter 패키지입니다. 안드로이드에서는 Google ML을, iOS에서는 Apple Vision을 사용합니다.
기기 카메라를 사용하여 신용카드 정보를 스캔하고 추출하는 Flutter 패키지로, 모바일 애플리케이션에서 카드 정보를 원활하고 효율적으로 캡처할 수 있는 방법을 제공합니다.
^0.0.3^0.0.4^0.12.0^2.1.0^0.15.1{"sdk":"flutter"}{"sdk":"flutter"}아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
🇵🇸 In solidarity with Palestine and all the free people of the world 🇵🇸
Description:
Introducing a cutting-edge Flutter package that harnesses the power of your device's camera to seamlessly scan and extract credit card information. This innovative solution leverages state-of-the-art machine learning technologies: Google ML Kit for Android devices and Apple Vision for iOS, ensuring optimal performance across platforms.
CameraScannerWidget (
onScan: (ctx, value) {},
loadingHolder: CircularProgressIndicator(),
onNoCamera: () {
// Handle camera unavailability
}
)
Demo: Witness the magic in action! 🎥✨
https://github.com/user-attachments/assets/ff6e818c-a65c-4bff-bb95-cbaef2368a23
Key Features:
Input Parameters:
onScan (required): Your gateway to extracted card data! This callback function receives the BuildContext and a CreditCardModel object containing the juicy details (number, holder name, expiration month, expiration year) when a card is successfully scanned.loadingHolder (required): Keep your users engaged! Specify a widget to display during camera initialization.onNoCamera (required): Gracefully handle camera unavailability with this callback function.aspectRatio (optional): Fine-tune your preview! Set the aspect ratio of the camera view (defaults to device screen ratio).cardNumber (optional): Toggle card number scanning (default: true).cardHolder (optional): Enable/disable cardholder name extraction (default: true).cardExpiryDate (optional): Control expiry date scanning (default: true).useLuhnValidation (optional): Enable/disable Luhn validation (default: true).durationOfNextFrame (optional): The duration of the next frame. This can be used to slow down the camera scanning and process the image so it will scan and wait for the next frame to be processed based on the duration. Default is null which means the camera will scan as fast as possible.resolutionPreset (optional): The resolution preset for the camera. Defaults to [ResolutionPreset.high]. This can be used to set the resolution of the camera to a lower resolution to improve performance. Depends on the targeted platform it can be ResolutionPreset.low, ResolutionPreset.medium, ResolutionPreset.high, ResolutionPreset.veryHigh, ResolutionPreset.ultraHigh, ResolutionPreset.max.Platform-Specific Setup:
Android Configuration:
android/app/build.gradle:android {
defaultConfig {
minSdkVersion 21
// ... other configurations
}
}
android/app/src/main/AndroidManifest.xml:<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.your_app_name">
<uses-permission android:name="android.permission.CAMERA" />
</manifest>
iOS Configuration:
ios/Runner/Info.plist:<key>NSCameraUsageDescription</key>
<string>This app needs camera access to scan credit cards.</string>
ios/Podfile:platform :ios, '15.5' // minimum deployment target
Don't forget to run pod install in the ios directory!
Example Usage:
import 'package:flutter_credit_card_scanner/flutter_credit_card_scanner.dart';
import 'package:flutter/material.dart';
class MyAppCreditCardScanner extends StatefulWidget {
const MyAppCreditCardScanner({super.key});
@override
State<MyAppCreditCardScanner> createState() => _MyAppCreditCardScannerState();
}
class _MyAppCreditCardScannerState extends State<MyAppCreditCardScanner> {
CreditCardModel? cardModel;
@override
Widget build(BuildContext context) {
return Stack(
children: [
CameraScannerWidget(
onNoCamera: () {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text('No camera found, please enable camera')));
},
onScan: (_, p1) {
setState(() {
cardModel = p1;
});
},
loadingHolder: const Center(
child: CircularProgressIndicator(),
),
),
if (cardModel != null)
Align(
alignment: Alignment.bottomCenter,
child: Container(
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(10)),
padding: MediaQuery.of(context)
.padding
.add(const EdgeInsets.symmetric(horizontal: 10, vertical: 5)),
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 400),
child: Column(
mainAxisSize: MainAxisSize.min,
key: ValueKey(cardModel),
children: [
Text(cardModel!.number),
Text(cardModel!.holderName),
Text(cardModel!.expiryDate),
]
.map((e) => Padding(
padding: const EdgeInsets.all(5),
child: Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: e,
))))
.toList()),
),
),
)
],
);
}
}
Conclusion: Elevate your app's user experience with seamless credit card scanning! 🚀💳✨