About matrixscan-count-flutter
A coding skill for using Scandit BarcodeCount in Flutter. It routes integration and migration questions to references and emphasizes verifying APIs rather than relying on memory.
Key features
- 01BarcodeCount integration guidance
- 02Migration guidance for newer APIs
- 03Version-specific Flutter API notes
- 04BLoC-based implementation guidance
- 05Scandit license setup instructions
Use cases
- 01Adding barcode counting to a Flutter app
- 02Updating an app to newer BarcodeCount APIs
- 03Troubleshooting Flutter initialization or API usage
MCP support
The skill describes connecting to the Scandit MCP server to provision a trial license key, with instructions for configuring supported MCP clients.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ scandit/ skills --skill matrixscan-count-flutterAfter installing, type/matrixscan-count-flutterin Claude Code to confirm it loaded.
Bundled filesreferences/integration.mdreferences/migration.md
Details
From the project READMEMatrixScan Count Flutter Skill
Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCount API changes between major SDK versions — class names, constructor signatures, listener interfaces, and the Flutter plugin import path have all evolved.
Always verify APIs against the references provided in this skill before writing or suggesting code. Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Flutter-specific gotchas worth flagging:
await ScanditFlutterDataCaptureBarcode.initialize()must be called (and awaited) inmain()beforerunApp(...), afterWidgetsFlutterBinding.ensureInitialized(). Forgetting this yields a platform-channel error that can look unrelated to initialization.BarcodeCountViewis a FlutterStatefulWidget. The sample creates it inline inbuild()using the cascade..uiListener = _bloc ..listener = _bloc— this is correct for BarcodeCount because the view is not torn down on rebuild in the same way as BarcodeArView. However, storing it as a field ininitState()is also acceptable for clarity.BarcodeCount(settings)is the context-free constructor available on Flutter ≥7.6. On older SDKs (Flutter 6.17–7.5) you must useBarcodeCount.forDataCaptureContext(context, settings)which returns aFuture<BarcodeCount>— await it before adding listeners. After ≥7.6, calldataCaptureContext.setMode(barcodeCount)explicitly when using the context-free constructor.- The BLoC owns
DataCaptureContext,BarcodeCount, and the camera lifecycle. The BLoC also implementsBarcodeCountListener,BarcodeCountViewListener, andBarcodeCountViewUiListener. - The BarcodeCount import barrel is
scandit_flutter_datacapture_barcode_count— a separate barrel fromscandit_flutter_datacapture_barcode. Always import both. Symbologyenum values use lowerCamelCase in Dart:Symbology.code128,Symbology.ean13Upca,Symbology.code39. Do not writeSymbology.Code128/Symbology.EAN13UPCA— that is the JS/TS form and will not compile in Dart.- Flutter-only listener methods:
BarcodeCountListeneron Flutter ≥8.3 has an extended interfaceIBarcodeCountExtendedListenerthat addsdidUpdateSession.BarcodeCountCaptureListListeneron Flutter ≥8.3 hasIBarcodeCountCaptureListExtendedListenerthat addsdidCompleteCaptureList. These are Flutter-exclusive additions. BarcodeCountViewmust be presented full screen per the SDK documentation.- Camera permission is required on both iOS (
NSCameraUsageDescriptioninios/Runner/Info.plist) and Android (runtime request viapermission_handler). - Min SDK callouts: BarcodeCount Flutter 6.17; context-free constructor 7.6; Status mode 7.0 (earliest on Flutter); Mapping flow 8.3; Not-in-list action settings 8.3;
TextForBarcodesNotInListDetectedHint8.3;TextForClusteringGestureHint8.3;shouldDisableModeOnExitButtonTapped8.3. - License placeholder must be exactly:
'-- ENTER YOUR SCANDIT LICENSE KEY HERE --'
Intent Routing
Based on the user's request, load the reference file before responding:
-
Integrating BarcodeCount from scratch (e.g. "add MatrixScan Count to my app", "set up barcode counting", "how do I use BarcodeCount in Flutter", "how do I count barcodes", "scanning against a list") → read references/integration.md and follow the instructions there.
-
Migrating from an older BarcodeCount constructor or adding newer features (e.g. "migrate from forDataCaptureContext", "update BarcodeCount constructor", "add status mode", "add mapping flow", "not-in-list actions") → read references/migration.md and follow the guide there.
API Usage Policy
Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if an analyzer / runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further.
Never construct or guess documentation URLs. When you need a specific class or property's API page:
- First check whether the page you already fetched contains a direct hyperlink to it.
- If no direct link was found, fetch the API index and extract the actual link from it.
Framework variant policy
Flutter apps use many state-management patterns (StatefulWidget, BLoC, Provider, Riverpod). Examples in this skill use the BLoC pattern because it matches the official MatrixScanCountSimpleSample, keeps the scan pipeline cleanly separated from the widget tree, and composes well with the camera lifecycle. If the target project already uses a different pattern, keep the BarcodeCount wiring conceptually the same (one owner holds DataCaptureContext, BarcodeCount, and exposes session data to the UI) and port the code snippets into the project's existing convention.
Licence key
Scanning needs a Scandit licence key. For this skill the licence product is native and the licence platforms are ios and android.
Work through these in order — never block the user on MCP:
-
The Scandit MCP server is connected — call
ensure_scanner_setupwith productnativeand platformsiosandandroid, then run the commandget_license_env_commandreturns, which writes the key into the project's.env. Show at most a masked preview in chat; never print a full key. -
It is not connected — offer to connect it once, then continue from step 1:
- Claude Code:
claude mcp add --transport http scandit https://ssl.scandit.com/mcp - Cursor: add
{"mcpServers": {"scandit": {"url": "https://ssl.scandit.com/mcp"}}}to~/.cursor/mcp.json - VS Code: add
{"servers": {"scandit": {"type": "http", "url": "https://ssl.scandit.com/mcp"}}}to the MCP user configuration
Authentication is browser-based, so it is not supported headless or in CI. The server provisions trial keys only; it never creates, revokes, or modifies production licences.
- Claude Code:
-
The user declines, or has no MCP client — they generate a key themselves at https://ssl.scandit.com (no account yet: https://ssl.scandit.com/dashboard/sign-up?p=test) and paste it in.
Then put the key into the code in place of the placeholder; a key in .env does not reach the app by itself. Pass it at build time with --dart-define-from-file=.env and read it with String.fromEnvironment. The simplest route on any platform: read .env and put the key into the licence-key call directly, still showing only a masked preview in chat.
References
Direct users to the right resource based on their question:
| Topic | Resource |
|---|---|
| Flutter integration | Get Started · Sample |
| Full API reference | BarcodeCount API |