qr_scanner_with_effect 2.0.0 copy "qr_scanner_with_effect: ^2.0.0" to clipboard
qr_scanner_with_effect: ^2.0.0 copied to clipboard

A Flutter package for QR scanner with scanning effect.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:developer';
import 'dart:io';
import 'package:qr_code_scanner/qr_code_scanner.dart';
import 'package:qr_scanner_with_effect/qr_scanner_with_effect.dart';

void main(){

  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: ExampleScreen(),
    );
  }
}

class ExampleScreen extends StatefulWidget {
  const ExampleScreen({super.key});

  @override
  State<ExampleScreen> createState() => _ExampleScreenState();
}

class _ExampleScreenState extends State<ExampleScreen> {

  Barcode? result;
  QRViewController? controller;
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');

  bool isComplete = false;

  void onQrScannerViewCreated(QRViewController controller) {

    this.controller = controller;
    controller.scannedDataStream.listen((scanData) async{

      result = scanData;
      controller.pauseCamera();

      await Future<void>.delayed(const Duration(milliseconds: 300));

      String? myQrCode = result?.code!=null && result!.code.toString().isNotEmpty ?result?.code.toString():'';
      if(myQrCode!=null && myQrCode.isNotEmpty){
        manageQRData(myQrCode);
      }

    });
  }

  void manageQRData(String myQrCode)async{
    controller?.stopCamera();
    setState(() {
      isComplete = true;
    });
  }

  @override
  void reassemble() {
    if (Platform.isAndroid) {
      controller!.pauseCamera();
    } else if (Platform.isIOS) {
      controller!.resumeCamera();
    }
    super.reassemble();
  }

  @override
  void dispose() {
    controller?.dispose();
    controller?.stopCamera();
    super.dispose();
  }

  void onPermissionSet(BuildContext context, QRViewController ctrl, bool p) {
    log('${DateTime.now().toIso8601String()}_onPermissionSet $p');
    if (!p) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('no Permission')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {

    return SafeArea(
      top: false,
      bottom: false,
      child: Scaffold(
        extendBodyBehindAppBar: true,
        backgroundColor: Colors.transparent,
        body: LayoutBuilder(
            builder: (BuildContext context, BoxConstraints constraints) {
              return QrScannerWithEffect(
                isScanComplete: isComplete,
                qrKey: qrKey,
                onQrScannerViewCreated: onQrScannerViewCreated,
                qrOverlayBorderColor: Colors.redAccent,
                cutOutSize: (MediaQuery.of(context).size.width < 300 || MediaQuery.of(context).size.height < 400) ? 250.0 : 300.0,
                onPermissionSet: (ctrl, p) => onPermissionSet(context, ctrl, p),
                effectGradient: const LinearGradient(
                  begin: Alignment.topCenter,
                  end: Alignment.bottomCenter,
                  stops: [0.0, 1],
                  colors: [
                    Colors.redAccent,
                    Colors.redAccent,
                  ],
                ),
              );
            }
        ),
      ),
    );
  }
}
27
likes
150
points
163
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package for QR scanner with scanning effect.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, qr_code_scanner

More

Packages that depend on qr_scanner_with_effect