widget_toolkit_qr 0.2.0 copy "widget_toolkit_qr: ^0.2.0" to clipboard
widget_toolkit_qr: ^0.2.0 copied to clipboard

A Flutter package which provides a QR scanner widget easy integrated into the application.

Widget Toolkit QR #

Widget Toolkit QR package helps developers to add a QR scanner functionality into their applications. It can be used in the authentication process of an application.

This package is a wrapper of mobile_scanner, for more information about the mobile_scanner package, check out its documentation.

Support iOS and Android

Demo #

Success Scan Scan Error Permission Asked
Scan Success Scan Error Permission Asked

Widgets #

  • QrScannerWidget<T>

QrScannerWidget<T> is the widget, which displays a QR scanner and a loading indicator below the QR scanner. The widget can be configured so it returns the expected value ones the validation has passed.

Functions #

  • void showAppCameraPermissionBottomSheet()

showAppCameraPermissionBottomSheet() is a function, which shows a bottom modal sheet with a text message on the screen. You should provide that message telling the user, that he/she should enable the access of the application to the device's camera.

  • void showQrScannerErrorBottomModalSheet()

showQrScannerErrorBottomModalSheet() is a function, which can be used to provide a bottom modal sheet, that displays the error returned from the onError method of QrScannerWidget.

Note: The implementation of the abstract class QrValidationService<T> should be provided to the QrScannerWidget.

Getting started #

For Android

Step 1: Configure your project by adding to your_project_root/android/app/build.gradle:

    android {
        compileSdkVersion 34
    }

Step 2: Add in your_project_root/android/gradle.properties:

    android.useAndroidX=true
    android.enableJetifier=true

Step 3: Open the AndroidManifest.xml file in your android/app/src/main directory and add the following device permissions:

   ...
    <uses-permission android:name="android.permission.CAMERA"/>
   ...

For iOS

Open the Info.plist file in your ios/Runner directory and add the following permissions:

    ...
    <key>NSCameraUsageDescription</key>
    <string>Your message to user when the camera is accessed for the first time</string>
    ...

Usage #

Step 1: Add widget_toolkit_qr package as a dependency in your pubspec.yaml file:

    $ flutter pub add widget_toolkit_qr

Step 2: If you missed the steps in the [Getting started][#getting-started] section now is the time to apply them.

Step 3: Pass the WidgetToolkitTheme and QrScannerTheme extensions to the ThemeData of your app:

MaterialApp(    
  theme: ThemeData.light().copyWith(    
    colorScheme: ColorScheme.fromSwatch(),
    extensions: [ WidgetToolkitTheme.light(), QrScannerTheme.light(), ],
  ),    
  darkTheme: ThemeData.dark().copyWith(    
    colorScheme: ColorScheme.fromSwatch(),    
    extensions: [ WidgetToolkitTheme.dark(), QrScannerTheme.dark(), ],
  ),
);

Note: The WidgetToolkitTheme comes from the Widget Toolkit package which already presence in the Widget Toolkit QR package.
It can be imported with the following line:

    import 'package:widget_toolkit/widget_toolkit.dart';

Step 4: You should provide implementation of QrValidationService<T>, for example:

    class QrService extends QrValidationService<String> {
      @override
      Future<String> validateQrCode(String qrCode) async {
        ///TODO: validate the qr data here
        return qrCode;
      }
    }

Step 5: Import the package with the following line:

    import 'package:widget_toolkit_qr/widget_toolkit_qr.dart';  

after which you are ready to start using the widget in your app.

Example for QrScannerWidget<T> usage:

    QrScannerWidget<String>(
      qrValidationService: QrService(),
      onCodeValidated: (result) => showBlurredBottomSheet(
        context: context,
        builder: (ctx) => MessagePanelWidget(
          message: result ?? '',
          messageState: MessagePanelState.positiveCheck,
        ),
      ),
      onError: (error) => showErrorBlurredBottomSheet(
        context: context,
        error: TranslateErrorUtil.translateError(error),
        configuration:
            const ModalConfiguration(showCloseButton: true),
      ),
    )

Customization #

We try to make the QrScannerWidget<T> as customised as possible.

qrValidationService #

requires an implementation of QrValidationService<T>.

onCodeScanned #

is an optional callback which is called right after the QR code has been scanned and before it is passed to the validation service.

onCodeValidated #

is an optional callback which returns the result from the validation method.

onError #

is an optional callback which return an error no matter if it is a validation error or an error which comes from the QRScanner itself.

cameraPermissionButtonText #

an optional property overriding the text in the button, which is in the camera permission bottom modal sheet.

cameraAccessTitleText #

an optional property overriding the title of the camera permission bottom sheet.

cameraAccessLabelText #

an optional property overriding the content of the error in the camera permission bottom sheet.

cameraPermissionBottomSheetConfiguration #

it customises the camera permission bottom sheet behaviour.

spaceBetweenScannerAndLoadingWidget #

a double value used to set the space between the QR scanner widget and the loading widget.

isLoadingIndicatorVisible #

is a boolean property with a default value true which defines if the loading indicator should be visible while the scanned QR code is processed.