FaceID Verify
A Flutter package for face scanning and face verification using the device camera.
It captures face data and compares it with previously stored face data.
Installation
Add the package to your pubspec.yaml.
dependencies:
faceidverify: ^last_version
Then run:
flutter pub get
Permissions
Android
Add camera permission to:
android/app/src/main/AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
iOS
Add camera usage description to:
ios/Runner/Info.plist
<key>NSCameraUsageDescription</key>
<string>Camera permission is required for face verification</string>
Usage
1. Register Face
Use FaceScanner to capture face data from the user.
FaceScanner(
onScanCompleted: (faces) {
if (faces == null) return;
// faces -> List<String>
// Save this to your database or API
print(faces);
},
)
Returned data:
List<String>
These values represent the user's face data and should be stored.
2. Verify Face
Use stored face data to verify the user.
FaceVerify(
faceDatas: storedFaces,
onVerifyCompleted: (result) {
if (result) {
print("Verification successful");
} else {
print("Verification failed");
}
},
)
Full Example
class FaceExamplePage extends StatefulWidget
{
const FaceExamplePage({super.key});
@override
State<FaceExamplePage> createState() => _FaceExamplePageState();
}
class _FaceExamplePageState extends State<FaceExamplePage>
{
List<String>? faces;
@override
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(title: const Text("FaceID Example")),
body: faces == null
? FaceScanner(
onScanCompleted: (data)
{
setState(()
{
faces = data;
});
},
)
: FaceVerify(
faceDatas: faces!,
onVerifyCompleted: (result)
{
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(result ? "Success" : "Failed"),
),
);
},
),
);
}
}
Services
FaceScanner
Responsible for:
- Opening the camera
- Performing a liveness check
- Generating multiple face samples
- Returning the result through
onScanCompleted
Return type:
List<String>
This represents the user's face data.
FaceVerify
Responsible for:
- Opening the camera
- Creating new face data
- Comparing with stored data
- Returning the verification result
Callback:
onVerifyCompleted(bool result)
FaceIdService
Handles all internal processing.
Responsibilities:
- Face detection
- Face data generation
- Liveness detection
- Face comparison
Both widgets use this service internally.
Flow
FaceScanner
↓
face data generated
↓
stored in database
↓
FaceVerify
↓
user verified
Customization
Some parameters can be customized.
FaceVerify(
scanSteps: 5,
threshold: 0.75,
width: 320,
)