What is Flutter?
Flutter is an open-source mobile UI framework created by Google and it released in May 2017. In simple words, It allows creating of a native mobile application with only one codebase.
How to make QR Code Scanner and Generator app in Flutter ?
Step 1. Create your flutter project.
Type on Terminal or cmd flutter create my_project_name. Make sure before typing this command you must have connected your pc with the internet.
Step 2. Add dependency.
Go to pub.dev and search flutter_barcode_scanner and barcode_widget this to packages help to create QR code and scanner QR code.
flutter_barcode_scanner – This package is help to scanning the bar code.
barcode_widget – This packages help to scanning QR code.
step 3. Creating screens or widgets.
Go to lib/main.dart and this Code
import 'package:flutter/material.dart';
import 'package:qrcode/screens/home.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'QR Code Scanner',
theme: ThemeData(
primaryColor: Colors.red,
),
home: HomeScreen());
}
}
and create screen folder in the lib directory and on screen folder create home.dart file.

import 'package:flutter/material.dart';
import 'package:qrcode/widgets/buttonwidget.dart';
import 'QRCreateScreen.dart';
import 'QRScanScreen.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('QR Code Scanner'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ButtonWidget(
textBut: 'Create QR code',
onClick: () => Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) => QRCreateScreen(),
)),
),
const SizedBox(
height: 32,
),
ButtonWidget(
textBut: 'Scan QR Code',
onClick: () => {
Navigator.of(context).push(
MaterialPageRoute(
// builder: (BuildContext context) => QRScanPage(),
builder: (BuildContext context) => QRScanScreen()),
)
},
),
],
),
),
);
}
}
QRCreateScreen.dart in screen directory.

import 'package:barcode_widget/barcode_widget.dart';
import 'package:flutter/material.dart';
class QRCreateScreen extends StatefulWidget {
const QRCreateScreen({Key? key}) : super(key: key);
@override
_QRCreateScreenState createState() => _QRCreateScreenState();
}
class _QRCreateScreenState extends State<QRCreateScreen> {
final controller = TextEditingController();
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: Text('Generate QR Code'),
),
body: Center(
child: SingleChildScrollView(
padding: EdgeInsets.all(24),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
controller.text.isEmpty
? Container(
width: 200,
height: 200,
)
: BarcodeWidget(
barcode: Barcode.qrCode(),
color: Colors.black,
data: controller.text,
width: 200,
height: 200,
),
SizedBox(height: 40),
Row(
children: [
Expanded(child: buildTextField(context)),
const SizedBox(width: 12),
FloatingActionButton(
backgroundColor: Theme.of(context).primaryColor,
child: Icon(Icons.done, size: 30),
onPressed: () => setState(() {}),
)
],
),
],
),
),
),
);
Widget buildTextField(BuildContext context) => TextField(
controller: controller,
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 20,
),
decoration: InputDecoration(
hintText: 'Enter the data',
hintStyle: TextStyle(color: Colors.grey),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide(
color: Theme.of(context).primaryColor,
),
),
),
);
}
QRScanScreen.dart in screen directory.

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart';
import 'package:qrcode/widgets/buttonwidget.dart';
class QRScanScreen extends StatefulWidget {
const QRScanScreen({Key? key}) : super(key: key);
@override
_QRScanScreenState createState() => _QRScanScreenState();
}
class _QRScanScreenState extends State<QRScanScreen> {
String qrCode = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Scan QR Code'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Scan Result',
style: TextStyle(
fontSize: 25,
color: Colors.black54,
fontWeight: FontWeight.bold,
),
),
IconButton(
onPressed: () {
Clipboard.setData(
ClipboardData(text: qrCode.isEmpty ? '' : qrCode));
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Copied to Clipboard")));
},
icon: Icon(Icons.copy),
iconSize: 25,
)
],
),
SizedBox(height: 8),
Text(
qrCode.toString(),
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.black54,
),
),
SizedBox(height: 60),
ButtonWidget(
textBut: 'Start QR scan', onClick: () => scanQRCode()),
],
),
),
),
);
}
// this functin will help to scann qr code.
Future<void> scanQRCode() async {
try {
final qrCode = await FlutterBarcodeScanner.scanBarcode(
'#ff6666',
"cancal",
true,
ScanMode.QR,
);
if (!mounted) return;
setState(() {
this.qrCode = qrCode;
print(qrCode);
});
} on PlatformException {
qrCode = 'Failed to get platform version.';
}
}
}

lib/widgets/buttonwidget.dart
import 'package:flutter/material.dart';
class ButtonWidget extends StatelessWidget {
final String? textBut;
final VoidCallback? onClick;
const ButtonWidget({Key? key, @required this.textBut, @required this.onClick})
: super(key: key);
@override
Widget build(BuildContext context) => RaisedButton(
child: Text(
textBut.toString(),
style: TextStyle(fontSize: 24),
),
shape: StadiumBorder(),
color: Theme.of(context).primaryColor,
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
textColor: Colors.white,
onPressed: onClick);
}
This is the code to create QR code scanner and QR code Creater