Skip to content

Getting Started

Use the pub tool so the dependency and lockfile stay consistent:

Terminal window
flutter pub add mrt_card_reader

Or add it manually in pubspec.yaml:

dependencies:
mrt_card_reader: ^0.3.0

Then fetch dependencies:

Terminal window
flutter pub get

Flutter SDK

3.0.0 or newer

Android

NFC device, API 19+

iOS

NFC device, iOS 13+

Add these entries in your AndroidManifest.xml:

<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />

Add this to your Info.plist:

<key>NFCReaderUsageDescription</key>
<string>This app needs access to NFC to read MRT card data.</string>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
</array>

In Xcode:

  1. Open your Flutter iOS project in Xcode.
  2. Select your target.
  3. Open Signing & Capabilities.
  4. Add Near Field Communication Tag Reading.
import 'package:flutter/material.dart';
import 'package:mrt_card_reader/mrt_card_reader.dart';
Future<void> readCard() async {
final available = await MrtCardReader.isAvailable();
if (!available) return;
await MrtCardReader.startSession(
onStatus: (status) => debugPrint(status),
onBalance: (balance) => debugPrint('Balance: $balance'),
onTransactions: (transactions) => debugPrint('Items: ${transactions.length}'),
onError: (exception) => debugPrint('Error: ${exception.message}'),
timeout: const Duration(seconds: 30),
);
}

Pre-check

Call isAvailable() before opening the scan state.

Active scan

Start a session with clear status text while waiting for tap + read completion.

Result + recovery

Render balance and history on success, and show one-tap retry for recoverable errors.