emvqr 0.0.22 copy "emvqr: ^0.0.22" to clipboard
emvqr: ^0.0.22 copied to clipboard

A plugin by Fawry for scanning EMV QR Codes.

example/lib/main.dart

import 'dart:async';
import 'package:emvqr/model/scan_result.dart';
import 'package:flutter/material.dart';
import 'package:emvqr/emvqr.dart';
import 'package:emvqr/model/qr_model.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Fawry SDK Flutter',
      theme: ThemeData(
        useMaterial3: true,
      ),
      darkTheme: ThemeData.dark(
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class QrResponsesWidget extends StatelessWidget {
  final int index;
  final ScanResult qrResponse;

  const QrResponsesWidget({
    Key? key,
    required this.index,
    required this.qrResponse,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 4,
      margin: const EdgeInsets.all(8),
      child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            SelectableText('Index: $index',
                style: const TextStyle(fontWeight: FontWeight.bold)),
            const SizedBox(height: 8),
            SelectableText('Status: ${qrResponse.status}'),
            const SizedBox(height: 4),
            SelectableText('Data: ${qrResponse.data}'),
          ],
        ),
      ),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // ignore: avoid_init_to_null
  late StreamSubscription? _fawryCallbackResultStream = null;
  bool isClicked = false;
  late List<ScanResult> qrResponses;
  QrModel? qrModel;

  @override
  void initState() {
    super.initState();
    qrResponses = [];
    setupCallback();
  }

  @override
  void dispose() {
    _fawryCallbackResultStream?.cancel();
    super.dispose();
  }

  Future<void> setupCallback() async {
    if (_fawryCallbackResultStream == null) {
      try {
        _fawryCallbackResultStream =
            Emvqr.instance.callbackResultStream().listen((event) {
          setState(() {
            Map<Object?, Object?> eventData = event;
            ScanResult response = ScanResult.fromJson(eventData);
            qrResponses.add(response);
            QrModel? model = response.extractQrModel();

            qrModel = model ?? qrModel;
            if (qrModel != null) {
              debugPrint(qrModel.toString());
            }
          });
        });
      } catch (ex) {
        debugPrint("Error in setupCallback: $ex");
      }
    }
  }

  Future<void> startScanning() async {
    qrModel = null;
    qrResponses = [];
    await Emvqr.instance.scanQR();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Fawry EMVQR'),
      ),
      body: ListView(
        shrinkWrap: true,
        children: [
          ElevatedButton(
              onPressed: () async {
                await startScanning();
              },
              child: const Text('Start Scanning')),
          if (qrModel != null) ...[
            ListTile(
              title: const Text(
                'QR Model',
                style: TextStyle(
                  fontSize: 20,
                  fontWeight: FontWeight.bold,
                ),
              ),
              subtitle: SelectableText(
                qrModel.toString(),
                style: const TextStyle(fontSize: 16),
              ),
            ),
          ],
          Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: qrResponses.asMap().entries.map((entry) {
              final int index = entry.key;
              final ScanResult response = entry.value;
              return QrResponsesWidget(
                index: index,
                qrResponse: response,
              );
            }).toList(),
          ),
        ],
      ),
    );
  }
}
2
likes
125
points
69
downloads

Publisher

unverified uploader

Weekly Downloads

A plugin by Fawry for scanning EMV QR Codes.

Documentation

API reference

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on emvqr