pda_rfid_scanner 0.0.4 copy "pda_rfid_scanner: ^0.0.4" to clipboard
pda_rfid_scanner: ^0.0.4 copied to clipboard

PlatformAndroid

A Flutter plugin project for RFID scan on Blovedream PDA devices. Uses Android sdk serialport. To communicate used MethodChannel and EventChannel.

example/lib/main.dart

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:pda_rfid_scanner/pda_rfid_scanner.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'PDA RFID Scanner Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const ScannerHomePage(),
    );
  }
}

class ScannerHomePage extends StatefulWidget {
  const ScannerHomePage({Key? key}) : super(key: key);

  @override
  State<ScannerHomePage> createState() => _ScannerHomePageState();
}

class _ScannerHomePageState extends State<ScannerHomePage> {
  String _platformVersion = 'Unknown';
  final List<ScanResult> _scanResults = [];
  ScanType _currentMode = ScanType.unknown;
  bool _isBarcodeActive = false;
  bool _isRfidActive = false;
  bool _autoRestartScan = true;
  StreamSubscription<ScanResult>? _scanSubscription;

  @override
  void initState() {
    super.initState();
    _initPlatformState();
    _setupScanListener();
  }

  @override
  void dispose() {
    _scanSubscription?.cancel();
    // When disposing the widget, turn off all active modules
    PdaRfidScanner.stopBarcodeScan();
    PdaRfidScanner.disableRfid();
    super.dispose();
  }

  // Initialize platform
  Future<void> _initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = await PdaRfidScanner.getPlatformVersion() ??
          'Unknown platform version';
    } catch (e) {
      platformVersion = 'Failed to get platform version';
    }

    // Get current device status
    await _updateDeviceStatus();

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  // Update device status
  Future<void> _updateDeviceStatus() async {
    final barcodeActive = await PdaRfidScanner.isScannerActive();
    final rfidActive = await PdaRfidScanner.isRfidActive();
    final currentMode = await PdaRfidScanner.getCurrentMode();

    setState(() {
      _isBarcodeActive = barcodeActive;
      _isRfidActive = rfidActive;
      _currentMode = currentMode;
    });
  }

  // Set up scan listener
  void _setupScanListener() {
    _scanSubscription = PdaRfidScanner.scanStream.listen((ScanResult result) {
      setState(() {
        // Limit list to last 20 results
        _scanResults.insert(0, result);
        if (_scanResults.length > 20) {
          _scanResults.removeLast();
        }
      });
    }, onError: (error) {
      if (kDebugMode) {
        print('Error in scan stream: $error');
      }
    });
  }

  // Start barcode scanner
  Future<void> _startBarcodeScan() async {
    final success = await PdaRfidScanner.startBarcodeScan();
    if (success) {
      ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Barcode scanner started')));
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Error starting barcode scanner')));
    }

    // Update auto-restart setting
    await PdaRfidScanner.setAutoRestartScan(_autoRestartScan);

    await _updateDeviceStatus();
  }

  // Stop barcode scanner
  Future<void> _stopBarcodeScan() async {
    final success = await PdaRfidScanner.stopBarcodeScan();
    if (success) {
      ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Barcode scanner stopped')));
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Error stopping barcode scanner')));
    }
    await _updateDeviceStatus();
  }

  // Enable RFID module
  Future<void> _enableRfid() async {
    final success = await PdaRfidScanner.enableRfid();
    if (success) {
      ScaffoldMessenger.of(context)
          .showSnackBar(const SnackBar(content: Text('RFID module enabled')));
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Error enabling RFID module')));
    }
    await _updateDeviceStatus();
  }

  // Disable RFID module
  Future<void> _disableRfid() async {
    final success = await PdaRfidScanner.disableRfid();
    if (success) {
      ScaffoldMessenger.of(context)
          .showSnackBar(const SnackBar(content: Text('RFID module disabled')));
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Error disabling RFID module')));
    }
    await _updateDeviceStatus();
  }

  // Clear scan results
  void _clearResults() {
    setState(() {
      _scanResults.clear();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('PDA RFID Scanner Demo'),
      ),
      body: Column(
        children: [
          // Status panel
          Container(
            padding: const EdgeInsets.all(16.0),
            color: Colors.grey[200],
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text('Running on: $_platformVersion'),
                const SizedBox(height: 8),
                Row(
                  children: [
                    Expanded(
                      child: Text(
                          'Current mode: ${_currentMode.toString().split('.').last}'),
                    ),
                    Chip(
                      label:
                          Text('Barcode: ${_isBarcodeActive ? "ON" : "OFF"}'),
                      backgroundColor: _isBarcodeActive
                          ? Colors.greenAccent
                          : Colors.redAccent,
                    ),
                    const SizedBox(width: 8),
                    Chip(
                      label: Text('RFID: ${_isRfidActive ? "ON" : "OFF"}'),
                      backgroundColor:
                          _isRfidActive ? Colors.greenAccent : Colors.redAccent,
                    ),
                  ],
                ),
                const SizedBox(height: 8),
                SwitchListTile(
                  title: const Text('Auto restart after scan'),
                  value: _autoRestartScan,
                  onChanged: (value) {
                    setState(() {
                      _autoRestartScan = value;
                    });
                    if (_isBarcodeActive) {
                      PdaRfidScanner.setAutoRestartScan(value);
                    }
                  },
                  dense: true,
                ),
              ],
            ),
          ),

          // Control buttons
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              children: [
                Row(
                  children: [
                    Expanded(
                      child: ElevatedButton(
                        onPressed: _isBarcodeActive
                            ? _stopBarcodeScan
                            : _startBarcodeScan,
                        style: ElevatedButton.styleFrom(
                          backgroundColor: _isBarcodeActive
                              ? Colors.redAccent
                              : Colors.greenAccent,
                        ),
                        child: Text(_isBarcodeActive
                            ? 'Stop Barcode'
                            : 'Start Barcode'),
                      ),
                    ),
                    const SizedBox(width: 16),
                    Expanded(
                      child: ElevatedButton(
                        onPressed: _isRfidActive ? _disableRfid : _enableRfid,
                        style: ElevatedButton.styleFrom(
                          backgroundColor: _isRfidActive
                              ? Colors.redAccent
                              : Colors.greenAccent,
                        ),
                        child: Text(
                            _isRfidActive ? 'Disable RFID' : 'Enable RFID'),
                      ),
                    ),
                  ],
                ),
                const SizedBox(height: 8),
                ElevatedButton(
                  onPressed: _clearResults,
                  child: const Text('Clear Results'),
                ),
              ],
            ),
          ),

          // Results list
          Expanded(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                Container(
                  padding:
                      const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
                  color: Colors.blue,
                  child: const Text(
                    'Scan Results',
                    style: TextStyle(
                      color: Colors.white,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
                Expanded(
                  child: _scanResults.isEmpty
                      ? const Center(child: Text('No scan results yet'))
                      : ListView.builder(
                          itemCount: _scanResults.length,
                          itemBuilder: (context, index) {
                            final result = _scanResults[index];
                            return ListTile(
                              leading: Icon(
                                result.type == ScanType.barcode
                                    ? Icons.qr_code
                                    : Icons.nfc,
                                color: result.type == ScanType.barcode
                                    ? Colors.blue
                                    : Colors.green,
                              ),
                              title: Text(result.data),
                              subtitle: Text(
                                '${result.type.toString().split('.').last} - ${result.timestamp.toString().substring(0, 19)}',
                                style: const TextStyle(fontSize: 12),
                              ),
                              dense: true,
                            );
                          },
                        ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
17
likes
160
points
79
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin project for RFID scan on Blovedream PDA devices. Uses Android sdk serialport. To communicate used MethodChannel and EventChannel.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on pda_rfid_scanner