Scanflow Data Capture Tyre
Pub package
Scanflow Data Capture Tyre is a Flutter plugin for scanning tyre-related data (tyre size, brand, DOT, number, handwritten digits) using the Scanflow AI SDK. It provides a ready-to-use camera scanner widget with configurable scan types, flash, and callbacks.
The plugin connects to the native Scanflow SDK via Flutter and requires the scanflow_core_scan package as a dependency.
Requirements
| iOS | Android |
|---|---|
| Supported | minSdk >= 24 |
Example
Minimal example: show the scanner and handle the result.
import 'package:flutter/material.dart';
import 'package:scanflow_datacapture_tyre/tyre_capture.dart';
import 'package:scanflow_datacapture_tyre/models/tyre_scan_result_success.dart';
class ScannerPage extends StatefulWidget {
const ScannerPage({super.key});
@override
State<ScannerPage> createState() => _ScannerPageState();
}
class _ScannerPageState extends State<ScannerPage> implements TextScanResultCallback {
late final TextScanResultCallbackHandler _callbackHandler;
@override
void initState() {
super.initState();
_callbackHandler = TextScanResultCallbackHandler();
_callbackHandler.registerCallback(this);
}
@override
void onTextScanResultSuccess(TextScanResultMain textScanResult) {
debugPrint('Scan result: ${textScanResult.textScanResult?.text}');
if (Navigator.canPop(context)) {
Navigator.pop(context, textScanResult);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: TextCapture(
licenseKey: 'YOUR_LICENSE_KEY_HERE',
textScanResultBackHandler: _callbackHandler,
scanType: TextScanType.tyreDot.name,
),
);
}
}
Quick Start Guide
1. Get a license
Get your license key from Scanflow Console. You need your app’s applicationId (Android) and bundleId (iOS) to generate a key. Each app needs its own license.
2. Add the plugin and core
Add to your pubspec.yaml:
dependencies:
scanflow_core_scan: ^2.1.0
scanflow_datacapture_tyre: ^2.1.0
Then run:
flutter pub get
3. Import the plugin
import 'package:scanflow_datacapture_tyre/tyre_capture.dart';
import 'package:scanflow_datacapture_tyre/models/tyre_scan_result_success.dart';
4. Add the callback handler and widget
- Create a
TextScanResultCallbackHandler, register your callback (e.g. a widget that implementsTextScanResultCallback). - Use the
TextCapturewidget withlicenseKey,textScanResultBackHandler, andscanType(e.g.TextScanType.tyreDot,tyreSize,tyreBrand,tyreNumber,handwrittenDigit).
5. (Optional) Initialize models on iOS
On iOS, you can pre-initialize models before showing the scanner:
await TextCapture.initializeModels();
6. Android configuration
- minSdkVersion: Set to at least 24 in your app’s
android/app/build.gradle. - Flutter embedding: Ensure
android/app/src/main/AndroidManifest.xmlincludes:
<meta-data
android:name="flutterEmbedding"
android:value="2" />
7. iOS configuration
In ios/Runner/Info.plist add (or adjust) camera and location usage descriptions, for example:
- Privacy - Camera Usage Description – e.g.
$(PRODUCT_NAME) camera use - Privacy - Location When In Use Usage Description – if your app uses location
Installation (summary)
Depend on it
flutter pub add scanflow_core_scan scanflow_datacapture_tyre
Or in pubspec.yaml:
dependencies:
scanflow_core_scan: ^2.1.0
scanflow_datacapture_tyre: ^2.1.0
Import it
import 'package:scanflow_datacapture_tyre/tyre_capture.dart';
import 'package:scanflow_datacapture_tyre/models/tyre_scan_result_success.dart';
Usage (TextCapture parameters)
| Parameter | Description |
|---|---|
licenseKey |
Required. Your Scanflow license key. |
textScanResultBackHandler |
Required. Handler that receives scan results (implements TextScanResultCallback). |
scanType |
One of: tyreSize, tyreBrand, tyreDot, tyreNumber, handwrittenDigit (use TextScanType.tyreDot.name etc.). |
resolution |
Optional. e.g. SD - 480p, HD - 720p, Full HD - 1080p, 4K. |
isBeepSound, isVibrate, isContinueScan |
Optional. Sound, vibration, and continuous scan. |
flashLight, isAutoExposure, isAutoZoom |
Optional. Flash and camera behaviour. |
buttonColor, buttonHeight, buttonRadius |
Optional. Capture button styling. |
showScanIcon, captureButton |
Optional. Custom or default capture button. |
isLandscape |
Optional. Layout for landscape. |
designSize |
Optional. Reference size for responsive UI (e.g. Size(375, 812)). |
controller |
Optional. TextCaptureController to trigger capture from outside. |
Result is delivered via TextScanResultMain (e.g. textScanResult?.text, imageResult).
Additional information
- Homepage: https://www.scanflow.ai/
- Documentation: Scanflow developer docs
- License: See the LICENSE file.