Flutter: escáner de código QR y generador de QR

El acceso a sitios web, imágenes y archivos mediante códigos QR es muy utilizado en la actualidad. Estos códigos QR se utilizan para realizar pagos, lo cual es fácil de usar. Puede ver esta función en varias aplicaciones de pago como Google Pay, Amazon Pay y muchas más. En el artículo de hoy vamos a ver cómo generar códigos QR para ciertos enlaces y escáneres de códigos QR en la app flutter.

Siga los pasos a continuación para crear una aplicación simple de escáner y generador QR en Flutter:

Paso 1: Primero agregue la siguiente dependencia en su archivo pubspec.yaml

Dart

dependencies:
   
  path_provider: ^1.6.24
  qr_flutter: ^3.2.0
  barcode_scan_fix: ^1.0.2

 Ahora haga clic en pub.get para configurar. 

Paso 2: ahora navegue hasta el archivo main.dart() y devuelva Material App()

Primero, hemos declarado MyApp() en runApp en la función principal. Luego hemos creado StatelessWidget para MyApp en el que hemos devuelto MaterialApp(). En este MaterialApp() le hemos dado el título de nuestra aplicación y luego declaramos el tema de nuestra aplicación como primarioSwatch como índigo. Luego le hemos dado nuestra primera pantalla o aplicación deslizante en el hogar: HomePage()

Dart

void main() {
  runApp(MyApp());
}
 
class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //Given Title
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      //Given Theme Color
      theme: ThemeData(
       primarySwatch: Colors.indigo,
      ),
      //Declared first page of our app
      home: HomePage(),
    );
  }
}

Paso 3: Declarar StatefulWidget() para HomePage 

En StatefulWidget() devuelve el widget Scaffold() . En Scaffold() Widget en la sección del cuerpo, hemos declarado que Container() tiene ancho y alto. En ese Container() le hemos dado a Column dentro de la cual le hemos dado mainAxisAlignment como centro y CrossAxisAlignment como un tramo. Después de eso, le hemos dado una imagen como imagen de red debajo de esa imagen, le hemos dado FlatButton() redondeado que tiene color, radio de borde y lado de borde. En ese FlatButton le hemos dado el método onPressed que se usa para navegar a la siguiente pantalla ScanQR().

Debajo de eso, hemos dado otro FlatButton() redondeado que tiene color, radio de borde y lado de borde. En ese FlatButton le hemos dado el método onPressed que se usa para navegar a la siguiente pantalla GenerateQR() .

Dart

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}
 
class _HomePageState extends State<HomePage> {
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
     
      body: Container(
        width: 500,
        height: 500,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            //Display Image
            Image(image: NetworkImage("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQQyYwscUPOH_qPPe8Hp0HAbFNMx-TxRFubpg&usqp=CAU")),
             
            //First Button
            FlatButton(
              padding: EdgeInsets.all(15),
              onPressed: (){
                Navigator.of(context).push(MaterialPageRoute(builder: (context)=> ScanQR()));
              },
                child: Text("Scan QR Code",style: TextStyle(color: Colors.indigo[900]),),
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(20),
                side: BorderSide(color: Colors.indigo[900]),
              ),
            ),
            SizedBox(height: 10),
 
            //Second Button
            FlatButton(
              padding: EdgeInsets.all(15),
              onPressed: (){
                Navigator.of(context).push(MaterialPageRoute(builder: (context)=>
                                                             GenerateQR()));
              },
              child: Text("Generate QR Code", style: TextStyle(color: Colors.indigo[900]),),
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(20),
                side: BorderSide(color: Colors.indigo[900]),
              ),
            ),
          ],
        ),
      )
    );
  }
}

Paso 4: Navegación a la página ScanQR().

En este archivo primero, hemos importado el paquete barcode_scan_fix . Luego hemos creado StateFulWidget para la clase ScanQR . En ese estado, hemos declarado String como qrcoderesult = ‘Not yet Scanned’ . Después de eso, en Scaffold() hemos declarado Appbar con el título. En la sección del cuerpo, hemos declarado Column() envuelto con Container() y dado mainAxisAlignment como centro y CrossAxisAlignment como extensión. Después de eso, hemos declarado dos widgets de texto, el primer widget de texto declarado para el título dado. Y el segundo widget de texto se usa para declarar la String que hemos dado. Después de eso, le hemos dado unFlatButton() y en su método onPressed , le hemos dado codeScanner que se utiliza para escanear el código QR que hemos importado de la biblioteca bar_code_scan_fix.

Dart

import 'package:barcode_scan_fix/barcode_scan.dart';
import 'package:flutter/material.dart';
 
class ScanQR extends StatefulWidget {
  @override
  _ScanQRState createState() => _ScanQRState();
}
 
class _ScanQRState extends State<ScanQR> {
 
  String qrCodeResult = "Not Yet Scanned";
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Scan QR Code"),
      ),
      body: Container(
        padding: EdgeInsets.all(20),
    child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: [
      //Message displayed over here
      Text(
        "Result",
        style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
        textAlign: TextAlign.center,
      ),
      Text(
        qrCodeResult,
        style: TextStyle(
          fontSize: 20.0,
        ),
        textAlign: TextAlign.center,
      ),
      SizedBox(
        height: 20.0,
      ),
 
      //Button to scan QR code
      FlatButton(
        padding: EdgeInsets.all(15),
        onPressed: () async {
          String codeSanner = await BarcodeScanner.scan();    //barcode scanner
          setState(() {
            qrCodeResult = codeSanner;
          });
        },
        child: Text("Open Scanner",style: TextStyle(color: Colors.indigo[900]),),
        //Button having rounded rectangle border
        shape: RoundedRectangleBorder(
          side: BorderSide(color: Colors.indigo[900]),
          borderRadius: BorderRadius.circular(20.0),
        ),
      ),
 
         ],
        ),
      ),
    );
  }
}

Paso 5: Navegar a la página GenerateQr().

Primero hemos dado StateFulWidget() para la clase GenerateQr() . En eso, hemos dado la variable final como TextEditingController(). En la sección Scaffold() le hemos dado appbar junto con el título. En la sección del cuerpo , le hemos dado a Container() que tiene Column() con mainAxisAlignment como centro y CrossAxisAlignment como extensión. Envuelto con SingleChildScrollView(). Después de eso, le hemos dado TextField()para dar enlace de entrada para convertir en un código de barras. Después de eso, le hemos dado FlatButton() que convertirá nuestro enlace en un código QR. En el onPressed de este FlatButton() hemos declarado su lógica en la que se utiliza la biblioteca importada qr_link para convertir el enlace en código QR.

Dart

import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';
 
class GenerateQR extends StatefulWidget {
  @override
  _GenerateQRState createState() => _GenerateQRState();
}
 
class _GenerateQRState extends State<GenerateQR> {
 
  String qrData="https://github.com/ChinmayMunje";
  final qrdataFeed = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //Appbar having title
      appBar: AppBar(
        title: Center(child: Text("Generate QR Code")),
      ),
      body: Container(
        padding: EdgeInsets.all(20),
        child: SingleChildScrollView(
           
          //Scroll view given to Column
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              QrImage(data: qrData),
              SizedBox(height: 20),
              Text("Generate QR Code",style: TextStyle(fontSize: 20),),
               
              //TextField for input link
              TextField(
                decoration: InputDecoration(
                  hintText: "Enter your link here..."
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                //Button for generating QR code
                child: FlatButton(
                    onPressed: () async {
                      //a little validation for the textfield
                      if (qrdataFeed.text.isEmpty) {       
                        setState(() {
                          qrData = "";
                        });
                      } else {
                        setState(() {
                          qrData = qrdataFeed.text;
                        });
                      }
                    },
                  //Title given on Button
                    child: Text("Generate QR Code",style: TextStyle(color: Colors.indigo[900],),),
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(20),
                    side: BorderSide(color: Colors.indigo[900]),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por chinmaymunje96 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *