import ' dart:typed_data ' ;
import ' package:flutter/material.dart ' ;
import ' package:flutter_markdown/flutter_markdown.dart ' ;
import ' package:flutter_zxing/flutter_zxing.dart ' ;
import ' package:font_awesome_flutter/font_awesome_flutter.dart ' ;
import ' package:image/image.dart ' as imglib ;
import ' package:url_launcher/url_launcher_string.dart ' ;
import ' package:zxscanner/configs/constants.dart ' ;
import ' package:zxscanner/widgets/common_widgets.dart ' ;
class HelpPage extends StatelessWidget {
const HelpPage ( { Key ? key } ) : super ( key: key ) ;
@ override
Widget build ( BuildContext context ) {
return Scaffold (
appBar: AppBar (
title: const Text ( ' Help ' ) ,
) ,
body: ContainerX (
child: Column (
children: [
Padding (
padding: const EdgeInsets . all ( spaceDefault ) ,
child: InkWell (
onTap: ( ) {
launchUrlString ( ' https://scanbot.io ' ) ;
} ,
child: Column (
children: const [
Text ( ' All information is taken from ' ) ,
Text ( ' scanbot.io ' ,
style: TextStyle ( fontWeight: FontWeight . bold ) ) ,
] ,
) ,
) ,
) ,
Expanded (
child: ListView (
padding: const EdgeInsets . only ( bottom: spaceLarge2 ) ,
children: createSlides ( context ) ,
) ,
) ,
] ,
) ,
) ,
) ;
}
Widget createSlide (
BuildContext context , {
String ? title ,
String ? body ,
int format = Format . QRCode ,
String ? qrText ,
int width = 100 ,
int height = 100 ,
} ) {
Uint8List ? bytes ;
if ( qrText ! = null ) {
final result =
FlutterZxing . encodeBarcode ( qrText , width , height , format , 5 , 0 ) ;
if ( result . isValidBool ) {
final img = imglib . Image . fromBytes ( width , height , result . bytes ) ;
bytes = Uint8List . fromList ( imglib . encodeJpg ( img ) ) ;
} else {
debugPrint ( ' Error: ${ result . errorMessage } ' ) ;
}
}
return Card (
margin: const EdgeInsets . all ( 8.0 ) ,
child: Padding (
padding: const EdgeInsets . all ( 8.0 ) ,
child: Theme (
data: Theme . of ( context ) . copyWith (
dividerColor: Colors . transparent ,
) ,
child: ExpansionTile (
leading: bytes ! = null
? Image . memory ( bytes , width: 100 )
: const SizedBox (
width: 100 ,
child: Icon ( FontAwesomeIcons . barcode , size: 50 ) ,
) ,
title: Text ( title ? ? ' ' ) ,
children: [
Padding (
padding: const EdgeInsets . all ( spaceDefault ) ,
child: MarkdownBody ( data: body ? ? ' ' ) ,
) ,
] ,
) ,
) ,
) ,
) ;
}
createSlides ( BuildContext context ) {
return [
createSlide (
context ,
title: ' QR Code ' ,
body: """
QR codes are highly versatile and cover a range of applications because they store a large amount of information in a relatively small area . They are particularly popular in advertising , such as on flyers or shop windows , in public transport and airline ticketing , and in parcel delivery .
* Defined in the ISO / IEC 18004 : 2006 and JIS X0510 standards .
* 2 D barcode that stores a maximum of 7089 digits or 4296 alphanumeric characters .
* Can be used free of charge – specifications are available from the Swiss - based International Organization for Standardization .
* Automatic error correction recovers damage to up to 30 % , depending on the correction level chosen .
""" ,
format: Format . QRCode ,
qrText: ' 123456789012 ' ,
) ,
createSlide (
context ,
title: ' DataMatrix ' ,
body: """
Due to its small size and large storage capacity , the Data Matrix code is most frequently used in the aerospace , automotive , and electronics sectors . Applied through permanent marking , the code can identify spare parts over their whole lifespan . It also has applications in healthcare and postal services .
* 2 D barcode with L - shaped border and pixel matrix .
* Defined in the ISO / IEC 16022 standard .
* Stores up to 3116 numeric or 2335 alphanumeric characters .
* Smallest size: 2.5 mm x 2.5 mm , thus ideal for small units .
* Often engraved on items via Direct Part Marking ( DPM ) .
* Readable even with low contrast .
""" ,
format: Format . DataMatrix ,
qrText: ' 123456789012 ' ,
) ,
createSlide (
context ,
title: ' Aztec ' ,
body: """
The transportation sector accounts for most Aztec Code use cases . Lufthansa airline tickets contain this code , as do Deutsche Bahn tickets . The International Union of Railways ( UIC ) has chosen the Aztec Code as its standard for ticketing . Additionally , Aztec Codes are used in the healthcare sector , notably on patient identification bracelets .
* Two - dimensional barcode , standardized in ISO / IEC 24778.
* Freely available under US patent number 5591956.
* Can store over 3 , 000 characters in up to 32 layers .
* Less widely used than QR and Data Matrix Codes .
* Enables both high data density and up to 95 % error tolerance .
* Pattern resembles a top - down view of an Aztec pyramid
""" ,
format: Format . Aztec ,
qrText: ' 123456789012 ' ,
) ,
createSlide (
context ,
title: ' PDF417 ' ,
body: """
Ticketing , travel , and logistics are some of the most common areas of application for PDF417 codes . They also find use in healthcare , warehousing , administration , and ID documents , in particular the US driver ' s license. Due to its high data density and customizable size, the PDF417 is one of the most versatile and widely used barcode types.
* A two - dimensional barcode that stores around 2725 numbers or 1850 alphanumeric characters .
* “ PDF ” is short for “ Portable data file ” .
* Defined in the ISO / IEC 15438 standard .
* High data density , yet with adjustable length and width .
* Striking redundancy: Up to 40 % damage can be compensated .
""" ,
format: Format . PDF417 ,
) ,
createSlide (
context ,
title: ' UPCA, UPCE ' ,
body: """
The Universal Product Code ( UPC ) is perfect for retail , warehousing , and distribution . Stores or warehouses use it in combination with their databases to assign individual prices or quantities to the coded products . Since the price is explicitly not part of the barcode , retail stores can set prices independently using their checkout system .
* Exclusively used within North America .
* One - dimensional barcode that stores exactly 12 numeric characters , which form the Global Trade Item Number ( GTIN ) .
* The low data density makes it inadequate for encoding complex data .
""" ,
format: Format . UPCA ,
qrText: ' 123456789012 ' ,
width: 200 ,
) ,
createSlide (
context ,
title: ' EAN8, EAN13 ' ,
body: """
The most important areas of application for EAN codes are retail , distribution , and warehousing . The EAN – short for European Article Number – is used to identify individual products , which can then be linked to quantities or prices in the store ’ s database . Since they can only store a limited amount of data , EAN codes are not suitable for the kind of complex information seen in ticketing or parcel shipping .
* Used worldwide despite the name , except for North America , which uses the UPC standard .
* Stores either 13 or 8 digits ( EAN - 13 vs . EAN - 8 ) , which encode a GTIN ( Global Trade Identification Number ) .
* The last digit is a mod10 checksum .
* EAN codes are defined as GS1 standards .
""" ,
format: Format . EAN13 ,
qrText: ' 123456789012 ' ,
width: 200 ,
) ,
createSlide (
context ,
title: ' Code39 ' ,
body: """
Unlike other common barcodes , Code 39 can also encode letters , which makes it indispensable in the industrial sector . A frequent use case is in factory automation in the automotive and electronics industries . In the US , it was standardized and adopted by the AIAG ( Automotive Industry Action Group ) .
* One - dimensional barcode that encodes 43 characters: uppercase letters , numeric digits , and a number of special characters .
* Self - checking . However , a modulo 43 check digit is sometimes included .
* The low data density makes it unsuitable for tiny items .
* Standardized as ANSI MH 10.8 M - 1983 and ANSI / AIM BC1 / 1995.
""" ,
format: Format . Code39 ,
qrText: ' 123456789012 ' ,
width: 200 ,
) ,
createSlide (
context ,
title: ' Code93 ' ,
body: """
This barcode symbology can store alphanumeric characters . Its main user , Canada Post , encodes supplementary delivery information with it .
* One - dimensional barcode encoding 43 alphanumeric characters and 5 special characters .
* In Code 93 Extended , combinations of those characters can represent all 128 ASCII characters .
""" ,
format: Format . Code93 ,
qrText: ' 123456789012 ' ,
width: 200 ,
) ,
createSlide (
context ,
title: ' Code128 ' ,
body: """
The Code 128 barcode is most frequently used in transporting goods , especially to mark containers for distribution , and warehousing . With it , various kinds of information about the respective goods can be flexibly encoded and read with a wide range of conventional scanners or smartphones . Its focus is clearly on non - POS areas . Check out our Barcode Scanner for logistics to learn more about possible application among the transportation area .
* A one - dimensional barcode defined in the ISO / IEC 15417 standard .
* Can encode all ASCII characters , including special characters .
* High data density compared to other 1 D barcode formats .
""" ,
format: Format . Code128 ,
qrText: ' 123456789012 ' ,
width: 200 ,
) ,
createSlide (
context ,
title: ' CodaBar ' ,
body: """
The Codabar barcode is only used in blood banks , libraries , and in laboratories .
* 1 D ( linear ) barcode type .
* Self - checking , with no need for a check digit .
* Encodes alphanumeric characters , as well as six special characters .
* Stores up to 16 characters .
* Newer barcode types can store more data in less space .
""" ,
format: Format . Codabar ,
qrText: ' 123456789012 ' ,
width: 200 ,
) ,
createSlide (
context ,
title: ' ITF ' ,
body: """
ITF barcodes are often described as Standard Distribution Codes . They are frequently found on cardboard boxes and other kinds of outer packaging .
* One - dimensional barcodes that encode two numerical characters for every five bars .
* High data density , as data is stored in both the bars and the gaps .
* Compared to other linear barcodes , more data can be accommodated using the same label size .
""" ,
format: Format . ITF ,
qrText: ' 123456789012 ' ,
width: 200 ,
) ,
] ;
}
}
/ *
DataBar
DataBarExpanded
MaxiCode
* /