{"id":4149,"date":"2021-04-14T10:47:52","date_gmt":"2021-04-14T08:47:52","guid":{"rendered":"https:\/\/www.evertop.pl\/?p=4149"},"modified":"2021-04-25T21:49:03","modified_gmt":"2021-04-25T19:49:03","slug":"how-to-write-a-simple-flutter-qr-code-scanner-app","status":"publish","type":"post","link":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/","title":{"rendered":"How To Write a Simple Flutter QR Code Scanner App"},"content":{"rendered":"<h2><strong>Intro<\/strong><\/h2>\n<p>In this article you will learn how to write a simple iOS and Android app which:<\/p>\n<ul>\n<li>scans QR codes witch a phone camera,<\/li>\n<li>if scanned data is a link it opens it in a browser,<\/li>\n<li>otherwise it displays it in a dialog.<\/li>\n<\/ul>\n<p>If you are new to Flutter and you have never built nor created an application using Flutter, please get familiar with <a href=\"https:\/\/flutter.dev\/docs\/get-started\/install\" target=\"_blank\" rel=\"noopener noreferrer\"><em>Get started<\/em><\/a> section on the official flutter.dev website before continuing.<\/p>\n<div class=\"media\"><span class=\"media-left\"><br \/>\n<img loading=\"lazy\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/02\/read-also.png\" alt=\"...\" width=\"40\" height=\"40\" \/><br \/>\n<\/span><\/p>\n<div class=\"media-body\">\n<h4 class=\"media-heading\">Read also: <a href=\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-downloading-app-with-flutter\/\" rel=\"noopener\">How To Write a Simple Downloading App With Flutter<\/a><\/h4>\n<\/div>\n<\/div>\n<h2><strong>Step 0. Setting up the project<\/strong><\/h2>\n<p>First of all, generate a new Flutter project if you haven\u2019t done it already \ud83d\ude42<\/p>\n<h2><strong>Step 1. Adding dependencies<\/strong><\/h2>\n<p>Add following dependencies to the <strong><em>pubspec.yaml<\/em><\/strong> file:<\/p>\n<p>qr_code_scanner: ^0.4.0<\/p>\n<p>Url_launcher: ^6.0.3<\/p>\n<p><a href=\"https:\/\/pub.dev\/packages\/qr_code_scanner\" target=\"_blank\" rel=\"noopener noreferrer\">qr_code_scanner<\/a> \u2014 A QR code scanner that works on both iOS and Android by natively embedding the platform view within Flutter. Note that this flutter plugin also has a barcode scanning support.<\/p>\n<p><a href=\"https:\/\/pub.dev\/packages\/url_launcher\" target=\"_blank\" rel=\"noopener noreferrer\">url_launcher<\/a> \u2014 A Flutter plugin for launching a URL.<\/p>\n<h2><strong>Step 2. Setting up minimal required versions<\/strong><\/h2>\n<p>Qr_scanner requires minimal versions to be set for both Android and iOS platform.<\/p>\n<ul>\n<li>iOS<\/li>\n<\/ul>\n<p>Go to <strong><em>ios\/Flutter\/AppFrameworkInfo.plist<\/em><\/strong> and find<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">&lt;key&gt;MinimumOSVersion&lt;\/key&gt;\r\n<\/pre>\n<p>Set its value to 8.0 in a following line:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">&lt;string&gt;8.0&lt;\/string&gt;\r\n<\/pre>\n<ul>\n<li>Android<\/li>\n<\/ul>\n<p>Go to\u00a0 <strong><em>android\/app\/build.gradle<\/em><\/strong> and find<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">minSdkVersion\r\n<\/pre>\n<p>Set sdk value to 21.<\/p>\n<p>Apart from that we don&#8217;t need to write any platform specyfic code.<\/p>\n<p>It is the beauty of Flutter apps \ud83d\ude09<\/p>\n<h2><strong>Step 3. Starting point<\/strong><\/h2>\n<p>It would be a little weird if our application started with a scanner screen right off the bat so instead we will start by making a button that will take us to the scanner page.<\/p>\n<p>Replace current <strong><em>_MyHomePageState<\/em><\/strong> build method with:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">@override\r\n\u00a0\u00a0Widget build(BuildContext context) {\r\n\u00a0\u00a0\u00a0\u00a0return Scaffold(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0appBar: AppBar(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title: Text(widget.title),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0body: Center(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: ElevatedButton(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: Text('Scan'),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0onPressed: () {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Navigator.push(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0context,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MaterialPageRoute(builder: (context) =&gt; Scanner()),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0);\r\n\u00a0\u00a0}\r\n<\/pre>\n<p>This won&#8217;t work just like that as we did not create Scanner screen, so let&#8217;s do it now!<\/p>\n<p>Create <strong><em>scanner.dart<\/em><\/strong> file in your lib folder.<\/p>\n<p>Now copy this code into it:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">import 'package:flutter\/material.dart';\r\nclass Scanner extends StatefulWidget {\r\n\u00a0\u00a0@override\r\n\u00a0\u00a0_ScannerState createState() =&gt; _ScannerState();\r\n}\r\n\u00a0\r\nclass _ScannerState extends State&lt;Scanner&gt; {\r\n\u00a0\u00a0@override\r\n\u00a0\u00a0Widget build(BuildContext context) {\r\n\u00a0\u00a0\u00a0\u00a0return Scaffold(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0appBar: AppBar(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title: Text(\"Scanner\"),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0);\r\n\u00a0\u00a0}\r\n}\r\n<\/pre>\n<p>We now have an app with one button that leads to another screen in which we will place our scanning widgets and code.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter\" src=\"https:\/\/lh3.googleusercontent.com\/iHJg4zZtL7F46iJGBLrrQazI7gVsQHBRqGYgZuZt940GC7GPUJbJh_uFpuLTriXwXMB6UScIF9qV8ENBuM5jtVLMSYLPwCJd4X_PwZ4bUQSj1GQqA7s3PTz2NUJI5JCrx8UEUtz6\" alt=\"flutter demo scanner app\" width=\"380\" height=\"824\" \/><\/p>\n<h2><strong>Step 4. Qr code scanner<\/strong><\/h2>\n<p>Now finally, it is the right time to add scanning functionality to our app!<\/p>\n<p>Add this code inside <strong><em>_ScannerState<\/em><\/strong> before build method:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">\u00a0\u00a0final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');\r\n\u00a0\u00a0QRViewController controller;\r\n\u00a0\r\n\u00a0\u00a0@override\r\n\u00a0\u00a0void dispose() {\r\n\u00a0\u00a0\u00a0\u00a0controller?.dispose();\r\n\u00a0\u00a0\u00a0\u00a0super.dispose();\r\n\u00a0\u00a0}\r\n<\/pre>\n<p>And then inside build method add body to our <strong><em>Scaffold<\/em><\/strong>:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">\u00a0\u00a0@override\r\n\u00a0\u00a0Widget build(BuildContext context) {\r\n\u00a0\u00a0\u00a0\u00a0return Scaffold(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0appBar: AppBar(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title: Text(\"Scanner\"),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0body: QRView(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0key: qrKey,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0onQRViewCreated: _onQRViewCreated,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0);\r\n\u00a0\u00a0}\r\n<\/pre>\n<p>After that add a new method under the build:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">\u00a0\u00a0void _onQRViewCreated(QRViewController controller) {\r\n\u00a0\u00a0\u00a0\u00a0this.controller = controller;\r\n\u00a0\u00a0\u00a0\u00a0controller.scannedDataStream.listen((scanData) async {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/do something\r\n\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0}\r\n<\/pre>\n<p>You will also need to import any missing package.<\/p>\n<p>Note that in Flutter if you start a method or field name with underscore it will be marked as a private method.<\/p>\n<h2><strong>Step 5. Open up a scanned url link<\/strong><\/h2>\n<p>Copy this code in place of <strong><em>\/\/do something<\/em><\/strong>:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0controller.pauseCamera();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (await canLaunch(scanData.code)) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await launch(scanData.code);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0controller.resumeCamera();\r\n<\/pre>\n<p>Note that because _onQRViewCreated function listens to a stream it will fire multiple times before a url link can be checked or launched. This could lead to launching multiple instances of the same page. To prevent that we pause and resume camera work when we check for validity of found data.<\/p>\n<p>Let&#8217;s check if it works!<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-4160\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/2-1-300x210.jpg\" alt=\"Hand using mobile smart phone scan QR code mockup template\" width=\"840\" height=\"588\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/2-1-300x210.jpg 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/2-1-1024x717.jpg 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/2-1-768x538.jpg 768w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/2-1-1536x1076.jpg 1536w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/2-1.jpg 1920w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/p>\n<p>Try scanning QR code on this image:<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter\" src=\"https:\/\/lh4.googleusercontent.com\/FTp_4o8jdldRKOxeFe44L2SBHAAuhyrVfeRXg8y42HJau8GRgB_hy6SMeVpeSK6gZ-gzIDvXDF_DckK0VrpzV7N_pegVU8dkjixPMe0VvaeM44zqPwpFycM_FgkWy8yh9vlcLAUZ\" alt=\"QR code\" width=\"429\" height=\"429\" \/><\/p>\n<h4 class=\"ql-align-center\" style=\"text-align: center;\"><strong><em>Congratulations!<\/em><\/strong><\/h4>\n<p>At this point we have made QR code scanner app that support iOS and Android. It will scan a QR code and if it contains a link it will be launched in an outside browser. If you want you can stop at this point.<\/p>\n<h2><strong>Step 6. Make it Better!<\/strong><\/h2>\n<p>Since our app is only looking for valid url in a QR code it ignores any QR code that doesn&#8217;t contain it even if the user is pointing right at it. This is bad as it creates confusion and appears as if the app is not working, so lets display some info dialog if that&#8217;s the case.<\/p>\n<p>Modify <strong><em>_onQRViewCreated <\/em><\/strong>function:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">\u00a0\u00a0void _onQRViewCreated(QRViewController controller) {\r\n\u00a0\u00a0\u00a0\u00a0this.controller = controller;\r\n\u00a0\u00a0\u00a0\u00a0controller.scannedDataStream.listen((scanData) async {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0controller.pauseCamera();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (await canLaunch(scanData.code)) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await launch(scanData.code);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0controller.resumeCamera();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0showDialog(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0context: context,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0builder: (BuildContext context) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return AlertDialog(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title: Text('Could not find viable url'),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0content: SingleChildScrollView(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: ListBody(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0children: &lt;Widget&gt;[\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Text('Barcode Type: ${describeEnum(scanData.format)}'),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Text('Data: ${scanData.code}'),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0actions: &lt;Widget&gt;[\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0TextButton(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: Text('Ok'),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0onPressed: () {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Navigator.of(context).pop();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0).then((value) =&gt; controller.resumeCamera());\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0}\r\n<\/pre>\n<p>Note that we resume camera work only after the url is launched or the user closes the dialog.<\/p>\n<p>This is optional but we can also make the scanner look a bit better. We will add a simple message under camera view and rectangular aim into the said camera. Replace <strong><em>Scaffold <\/em><\/strong>body:<\/p>\n<pre class=\"ql-syntax\" spellcheck=\"false\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0body: Stack(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0children: [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Column(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0children: &lt;Widget&gt;[\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Expanded(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0flex: 5,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: Stack(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0children: [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0QRView(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0key: qrKey,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0onQRViewCreated: _onQRViewCreated,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Center(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: Container(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0width: 300,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0height: 300,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0decoration: BoxDecoration(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0border: Border.all(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0color: Colors.red,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0width: 4,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0borderRadius: BorderRadius.circular(12),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Expanded(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0flex: 1,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: Center(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0child: Text('Scan a code'),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\r\n<\/pre>\n<p>Now it should look like this:<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter\" src=\"https:\/\/lh3.googleusercontent.com\/epGGiDkLUMiB4zR5on2uw1e09Tbv6XZ05upRoS5Mx-KHPZh2FCMX5O7YXUG3Zo0r4raB19XJogLwQd3e6SjRrqQPDdrEQOCY5nMCUcR96a_1qX24shvOc5fdj8lwHw62dZNgvEWT\" alt=\"scanner\" width=\"396\" height=\"859\" \/><\/p>\n<p>Try to scan QR code on this image:<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter\" src=\"https:\/\/lh6.googleusercontent.com\/Zj9yFo7gOVxatoavPOcIYKhJhyaxgpsWzPq-2zJ6BwyTlQkp9EP1_Jwf1TxbGDQRHkKhdDJN9BPbGbSeM6_Vwm0VgPd-x3gfKu3_CnhHgDm9D_OWdA74h6afRjH0lCtkwR7JPcOD\" alt=\"QR code\" width=\"392\" height=\"392\" \/><\/p>\n<h4 class=\"ql-align-center\" style=\"text-align: center;\"><strong><em>Congratulations!<\/em><\/strong><\/h4>\n<p>You now have a Flutter app that can navigate between two screens, scan QR codes and depending on scanned data opens a link in an external browser or displays it to the user. Also note that, while it is not the focus of this tutorial, using this app as barcode scanner is also posible without any changes to the code!<\/p>\n<p>You can find the full example in my <a href=\"https:\/\/github.com\/dkinvoker1\/Flutter_Qr_Code_Scanner_Example\" target=\"_blank\" rel=\"noopener noreferrer\"><em>GitHub<\/em> <em>repository<\/em><\/a>.<\/p>\n<h1><\/h1>\n","protected":false},"excerpt":{"rendered":"<p>Intro In this article you will learn how to write a simple iOS and Android app which: scans QR codes witch a phone camera, if scanned data is a link it opens it in a browser, otherwise it displays it in a dialog. If you are new to Flutter and you have never built nor [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":4161,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[13],"tags":[98,38],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How To Write a Simple Flutter QR Code Scanner App - Evertop<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Write a Simple Flutter QR Code Scanner App - Evertop\" \/>\n<meta property=\"og:description\" content=\"Intro In this article you will learn how to write a simple iOS and Android app which: scans QR codes witch a phone camera, if scanned data is a link it opens it in a browser, otherwise it displays it in a dialog. If you are new to Flutter and you have never built nor [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/\" \/>\n<meta property=\"og:site_name\" content=\"Evertop\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/EvertopPoland\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-14T08:47:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-04-25T19:49:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1281\" \/>\n\t<meta property=\"og:image:height\" content=\"663\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stefan Paj\u0105k\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.evertop.pl\/#organization\",\"name\":\"Evertop\",\"url\":\"https:\/\/www.evertop.pl\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/EvertopPoland\/\",\"https:\/\/www.linkedin.com\/company\/evertop-software-development\/\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"contentUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"width\":582,\"height\":114,\"caption\":\"Evertop\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.evertop.pl\/#website\",\"url\":\"https:\/\/www.evertop.pl\/\",\"name\":\"Evertop\",\"description\":\"we code the future\",\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.evertop.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg\",\"contentUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg\",\"width\":1281,\"height\":663,\"caption\":\"flutter qr code scanner app\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#webpage\",\"url\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/\",\"name\":\"How To Write a Simple Flutter QR Code Scanner App - Evertop\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#primaryimage\"},\"datePublished\":\"2021-04-14T08:47:52+00:00\",\"dateModified\":\"2021-04-25T19:49:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\\u0142\\u00f3wna\",\"item\":\"https:\/\/www.evertop.pl\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How To Write a Simple Flutter QR Code Scanner App\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/be896a72488c8f11461f50b8f5dd0001\"},\"headline\":\"How To Write a Simple Flutter QR Code Scanner App\",\"datePublished\":\"2021-04-14T08:47:52+00:00\",\"dateModified\":\"2021-04-25T19:49:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#webpage\"},\"wordCount\":741,\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg\",\"keywords\":[\"flutter\",\"mobile\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/be896a72488c8f11461f50b8f5dd0001\",\"name\":\"Stefan Paj\\u0105k\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/49964ef3d0043ae6cd5a32e16aaa95fb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/49964ef3d0043ae6cd5a32e16aaa95fb?s=96&d=mm&r=g\",\"caption\":\"Stefan Paj\\u0105k\"},\"url\":\"https:\/\/www.evertop.pl\/en\/author\/spajak\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How To Write a Simple Flutter QR Code Scanner App - Evertop","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/","og_locale":"en_US","og_type":"article","og_title":"How To Write a Simple Flutter QR Code Scanner App - Evertop","og_description":"Intro In this article you will learn how to write a simple iOS and Android app which: scans QR codes witch a phone camera, if scanned data is a link it opens it in a browser, otherwise it displays it in a dialog. If you are new to Flutter and you have never built nor [&hellip;]","og_url":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/","og_site_name":"Evertop","article_publisher":"https:\/\/www.facebook.com\/EvertopPoland\/","article_published_time":"2021-04-14T08:47:52+00:00","article_modified_time":"2021-04-25T19:49:03+00:00","og_image":[{"width":1281,"height":663,"url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg","path":"\/home\/evertop\/web-evertop\/wp-content\/uploads\/2021\/04\/1-1.jpg","size":"full","id":4161,"alt":"flutter qr code scanner app","pixels":849303,"type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"Stefan Paj\u0105k","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.evertop.pl\/#organization","name":"Evertop","url":"https:\/\/www.evertop.pl\/","sameAs":["https:\/\/www.facebook.com\/EvertopPoland\/","https:\/\/www.linkedin.com\/company\/evertop-software-development\/"],"logo":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#logo","inLanguage":"en-US","url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","contentUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","width":582,"height":114,"caption":"Evertop"},"image":{"@id":"https:\/\/www.evertop.pl\/#logo"}},{"@type":"WebSite","@id":"https:\/\/www.evertop.pl\/#website","url":"https:\/\/www.evertop.pl\/","name":"Evertop","description":"we code the future","publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.evertop.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#primaryimage","inLanguage":"en-US","url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg","contentUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg","width":1281,"height":663,"caption":"flutter qr code scanner app"},{"@type":"WebPage","@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#webpage","url":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/","name":"How To Write a Simple Flutter QR Code Scanner App - Evertop","isPartOf":{"@id":"https:\/\/www.evertop.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#primaryimage"},"datePublished":"2021-04-14T08:47:52+00:00","dateModified":"2021-04-25T19:49:03+00:00","breadcrumb":{"@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/www.evertop.pl\/en\/"},{"@type":"ListItem","position":2,"name":"How To Write a Simple Flutter QR Code Scanner App"}]},{"@type":"Article","@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#article","isPartOf":{"@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#webpage"},"author":{"@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/be896a72488c8f11461f50b8f5dd0001"},"headline":"How To Write a Simple Flutter QR Code Scanner App","datePublished":"2021-04-14T08:47:52+00:00","dateModified":"2021-04-25T19:49:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#webpage"},"wordCount":741,"publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"image":{"@id":"https:\/\/www.evertop.pl\/en\/how-to-write-a-simple-flutter-qr-code-scanner-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/1-1.jpg","keywords":["flutter","mobile"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/be896a72488c8f11461f50b8f5dd0001","name":"Stefan Paj\u0105k","image":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#personlogo","inLanguage":"en-US","url":"https:\/\/secure.gravatar.com\/avatar\/49964ef3d0043ae6cd5a32e16aaa95fb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/49964ef3d0043ae6cd5a32e16aaa95fb?s=96&d=mm&r=g","caption":"Stefan Paj\u0105k"},"url":"https:\/\/www.evertop.pl\/en\/author\/spajak\/"}]}},"_links":{"self":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4149"}],"collection":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/comments?post=4149"}],"version-history":[{"count":13,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4149\/revisions"}],"predecessor-version":[{"id":4281,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4149\/revisions\/4281"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/media\/4161"}],"wp:attachment":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/media?parent=4149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/categories?post=4149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/tags?post=4149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}