Home / Blog / How to create a QR code scanner screen

How to create a QR code scanner screen

Ionic Design Kit, built on a design base of Ionic Framework components, simplifies app development by providing designers with a range of pre-made elements. Designers can effortlessly pick and place elements, eliminating the need to create components from scratch. For developers, this means no complex coding – all components are sourced from the Ionic Framework. The result is a speedy, efficient, and collaborative process, making the Ionic Design Kit essential for both designers and developers.

The QR Code Scanner Screen is a crucial feature in mobile applications for payments, authentication, ticketing, and product verification. It provides a real-time scanning interface that allows users to scan QR codes instantly using their device's camera. A well-designed scanner screen enhances usability by integrating camera preview, auto-detection, focus indicators, and scan history, ensuring a smooth and efficient scanning experience.

This guide will walk you through the steps to design and implement a QR Code Scanner Screen using the Ionic Design Kit. By leveraging its pre-built components and the Ionic Framework, you can create a fast, responsive, and user-friendly scanner interface that simplifies QR code interactions.

1. Install Ionic CLI with the command

Creating a project with the Ionic CLI

npm i -g @ionic/cli

2. Create a new project

To create a new project, run the following command.

ionic start qr blank --type=react

3. Get inside the project directory

cd qr

4. Create a QR scanner page

Create page Qr.tsx inside src/pages and add code.

import { IonPage } from '@ionic/react';

const Qr: React.FC = () => {
  return (
    <IonPage></IonPage>
  );
};

export default Qr;

Please make sure that you've added routing in src/App.tsx for the created page. All Ionic framework components that will be used below should be imported similarly to the IonPage component.

5. Select the layout structure

For convenience, we will be using the layout structure recommended by Ionic for all screens. This allows us to add header code and content inside the IonPage.

Use color='dark' to set a color scheme.

<IonPage>
  <IonHeader>
    <IonToolbar>
    ...
    </IonToolbar>
  </IonHeader>
  <IonContent>
  ...
  </IonContent>
</IonPage>

6. Place the Back button component

In this subsection, the code creates an IonHeader that contains an IonToolbar, and within the toolbar, there is an IonButtons component placed in the start slot with additional padding provided by the class 'ion-padding-start'. This block is dedicated solely to the back button functionality. The IonBackButton inside this container is configured with a defaultHref that specifies the fallback URL if no navigation history is available, an empty text label to keep the button minimal, and a custom icon closeOutline displayed in dark color. This setup ensures that users have a clear and simple means to navigate away from the current page by tapping the back button.

import { closeOutline } from "ionicons/icons";

<IonHeader>
    <IonToolbar>
        <IonButtons slot='start' className='ion-padding-start'>
            <IonBackButton defaultHref='#' text='' icon={closeOutline} color='dark' />
        </IonButtons>
    </IonToolbar>
</IonHeader>

7. Put the title on top of the page

Following the back button, the header continues with an IonTitle component that displays the text 'Logotype'. This component is positioned within the same IonToolbar, thereby creating a unified header where the title is prominently displayed in the center by default. The combination of the back button and the title in the header provides both navigational functionality and context for the page, contributing to a cohesive user experience.

<IonHeader>
    <IonToolbar>
        <IonButtons slot='start' className='ion-padding-start'>
            <IonBackButton defaultHref='#' text='' icon={closeOutline} color='dark' />
        </IonButtons>
        <IonTitle>
            Logotype
        </IonTitle>
    </IonToolbar>
</IonHeader>

This concludes our work with IonHeader, and the following sections will cover working with IonContent.

8. Create a section with a heading

The content of the page is encapsulated within an IonContent element that uses the ion-padding and ion-text-center classes to ensure that all inner content is well-spaced and centrally aligned. Within this container, an IonText component is used to wrap an h1 element, which itself has the class ion-padding-top to provide extra spacing at the top. The h1 element contains the text 'Scan the QR code', serving as a clear instruction to the user about the primary action on the page. This heading sets the stage for the interactive component by immediately informing the user of what is expected.

<IonContent className='ion-padding ion-text-center'>
    <IonText>
        <h1 className='ion-padding-top'>
            Scan the QR code
        </h1>
    </IonText>
</IonContent>

9. Display QR image

Directly below the heading, an IonImg component is employed to display an image, which in this case is the QR code. The IonImg element is assigned a src attribute pointing to qr.png and an alt attribute with the description qr code to ensure accessibility. This image forms the central interactive element of the content section, reinforcing the instruction provided by the heading. Its placement below the text, combined with the overall center alignment, guarantees that the QR code is visually prominent and easy to scan for the user.

<IonContent className='ion-padding ion-text-center'>
    ...
    <IonImg
        src="qr.png"
        alt="qr code"
    />
</IonContent>

10. Add overlay icon

Below the background image, include a second IonImg component for the call overlay image call.png. Assign a class name like call to this image for custom positioning and styling. Use CSS to adjust its size, position, and appearance on top of the background image, ensuring it integrates seamlessly with the overall design.

<IonContent color='dark'>
    <IonImg src='back.jpg' alt='back icon' />
    <IonImg src='call.png' alt='call icon' className='call' />
</IonContent>

The footer of the page is defined using an IonFooter that contains an IonToolbar, which is set to center its content with the class ion-text-center. Inside the toolbar, an IonText component displays the text 'Enter the code manually'. This footer section offers an alternative action to scanning the QR code, ensuring that users who may have difficulties with scanning still have a clear option to proceed. The design of the footer complements the header and content sections by maintaining consistent styling and alignment, thereby providing a balanced overall layout for the page.

<IonContent color='dark'>
    ...
</IonContent>
<IonFooter>
    <IonToolbar className='ion-text-center'>
        <IonText>
            Enter the code manually
        </IonText>
    </IonToolbar>
</IonFooter>

Thank you for joining us on this exciting journey thus far. Stay tuned for more guides in our comprehensive series, where we'll not only delve into various aspects of mobile app development but also showcase how the Ionic Kit can be your game-changer.

Are you prepared to elevate your Ionic experience? Explore the advantages of incorporating the Ionic Design Kit for intuitive designs and seamless development. May your coding journey be marked by continual innovation and triumphant achievements!

Looking for Ionic kit for you platform?
Ionic Sketch
Ionic Figma
Ionic XD