UScanner class
Live QR/barcode scanner widget with scan window, torch, zoom, gallery and hint; all 6 platforms. Needs dart run u:app permission add camera. UScanner(onScan: (text) => print(text))
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatefulWidget
- UScanner
- Available extensions
Constructors
-
UScanner({ValueChanged<
String> ? onScan, ValueChanged<List< ? onCodes, void onScanError(Object error, StackTrace stackTrace)?, UCameraController? controller, bool autoStart = true, UCameraFacing facing = UCameraFacing.back, UCameraResolution resolution = UCameraResolution.high, UCameraLens? lensType, UScanSpeed speed = UScanSpeed.normal, Duration dedupeWindow = const Duration(milliseconds: 1500), List<UCode> >UCodeFormat> formats = const <UCodeFormat>[], UScanEngine engine = UScanEngine.auto, bool torchEnabled = false, bool tryInvert = false, bool autoZoom = false, double? initialZoom, BoxFit fit = BoxFit.cover, Widget errorBuilder(BuildContext context, UCameraException error)?, WidgetBuilder? placeholderBuilder, LayoutWidgetBuilder? overlayBuilder, Rect? scanWindow, bool restrictToScanWindow = true, bool useAppLifecycleState = true, bool tapToFocus = true, bool pinchToZoom = true, bool singleScan = true, bool hapticOnScan = true, bool showOverlay = true, Color? overlayColor, Size scanWindowSize = const Size(280, 280), Color? borderColor, double borderWidth = 3, double borderRadius = 16, double cornerLength = 32, bool showCorners = true, bool showFullBorder = false, bool showScanLine = true, Color? scanLineColor, double scanLineThickness = 2, Duration scanLineDuration = const Duration(seconds: 2), bool showTrackingBoxes = false, String? hintText, bool showHint = true, TextStyle? hintTextStyle, UScannerHintPosition hintPosition = UScannerHintPosition.bottom, double hintGap = 20, EdgeInsets hintPadding = const EdgeInsets.symmetric(horizontal: 14, vertical: 10), Color? hintBackgroundColor, double hintBorderRadius = 12, bool showControls = true, bool showTorchButton = true, bool showSwitchCameraButton = true, bool showGalleryButton = false, bool showZoomSlider = false, Alignment controlsAlignment = Alignment.bottomCenter, double controlsSpacing = 24, EdgeInsets controlsPadding = const EdgeInsets.only(bottom: 40), Color? controlIconColor, Color? controlActiveIconColor, Color? controlBackgroundColor, double controlButtonSize = 52, double controlIconSize = 26, IconData torchOnIcon = Icons.flash_on_rounded, IconData torchOffIcon = Icons.flash_off_rounded, IconData switchCameraIcon = Icons.cameraswitch_rounded, IconData galleryIcon = Icons.photo_library_rounded, Key? key}) -
const
Properties
- autoStart → bool
-
Starts the camera as soon as it is shown.
final
- autoZoom → bool
-
Zooms in automatically on small/far codes.
final
- borderColor → Color?
-
Border color.
final
- borderRadius → double
-
Corner radius.
final
- borderWidth → double
-
Border thickness.
final
- controlActiveIconColor → Color?
-
Control icon color when on (torch).
final
- controlBackgroundColor → Color?
-
Control button background.
final
- controlButtonSize → double
-
Control button size.
final
- controlIconColor → Color?
-
Control icon color.
final
- controlIconSize → double
-
Control icon size.
final
- controller → UCameraController?
-
External controller. When given, the session options below are ignored.
final
- controlsAlignment → Alignment
-
Where the controls sit.
final
- controlsPadding → EdgeInsets
-
Padding around the controls.
final
- controlsSpacing → double
-
Gap between control buttons.
final
- cornerLength → double
-
Length of the corner marks.
final
- dedupeWindow → Duration
-
Ignores the same code again within this time.
final
- engine → UScanEngine
-
Decoder: native (fast, uses the OS) or pure Dart (works everywhere).
final
- errorBuilder → Widget Function(BuildContext context, UCameraException error)?
-
Shown when loading fails.
final
- facing → UCameraFacing
-
Which camera to start with: back or front.
final
- fit → BoxFit
-
How the content fits its box (BoxFit).
final
-
formats
→ List<
UCodeFormat> -
Empty means every supported symbology. Restricting this is the single
biggest speed win available.
final
- galleryIcon → IconData
-
Gallery icon.
final
- hapticOnScan → bool
-
Vibrates when a code is read (mobile).
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- hintBackgroundColor → Color?
-
Hint bubble color.
final
- hintBorderRadius → double
-
Hint bubble corner radius.
final
- hintGap → double
-
Gap between the scan window and the hint.
final
- hintPadding → EdgeInsets
-
Padding inside the hint bubble.
final
- hintPosition → UScannerHintPosition
-
Hint above or below the scan window.
final
- hintText → String?
-
Grey hint shown while empty.
final
- hintTextStyle → TextStyle?
-
Hint text style.
final
- initialZoom → double?
-
Starting zoom level.
final
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- lensType → UCameraLens?
-
Preferred lens (wide, ultra-wide, telephoto) when the device has several.
final
-
onCodes
→ ValueChanged<
List< ?UCode> > -
Called with every symbol in each detection, with geometry and metadata.
final
-
onScan
→ ValueChanged<
String> ? -
Called with the raw value of the first symbol in each detection.
final
- onScanError → void Function(Object error, StackTrace stackTrace)?
-
Called when scanning fails (camera or decoder error).
final
- overlayBuilder → LayoutWidgetBuilder?
-
Draws your own overlay over the preview.
final
- overlayColor → Color?
-
Color of the dimmed area.
final
- pinchToZoom → bool
-
Pinch to zoom.
final
- placeholderBuilder → WidgetBuilder?
-
Shown while the camera starts or when it is unavailable.
final
- resolution → UCameraResolution
-
Resolution.
final
- restrictToScanWindow → bool
-
Only reads codes inside the scan window.
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- scanLineColor → Color?
-
Scan line color.
final
- scanLineDuration → Duration
-
Time for one pass of the scan line.
final
- scanLineThickness → double
-
Scan line thickness.
final
- scanWindow → Rect?
-
Explicit detection window in widget coordinates. Overrides
restrictToScanWindow plus scanWindowSize.
final
- scanWindowSize → Size
-
Size of the scan window.
final
- showControls → bool
-
Shows the torch/switch/gallery/zoom controls.
final
- showCorners → bool
-
Shows corner marks on the scan window.
final
- showFullBorder → bool
-
Draws the whole scan window border.
final
- showGalleryButton → bool
-
Shows a button to scan a picked image.
final
- showHint → bool
-
Shows the hint text.
final
- showOverlay → bool
-
Dims everything outside the scan window.
final
- showScanLine → bool
-
Shows the moving scan line.
final
- showSwitchCameraButton → bool
-
Shows the front/back camera button.
final
- showTorchButton → bool
-
Shows the flashlight button.
final
- showTrackingBoxes → bool
-
Draws a live box around each detected symbol.
final
- showZoomSlider → bool
-
Shows a zoom slider.
final
- singleScan → bool
-
Stop reporting after the first successful scan.
final
- speed → UScanSpeed
-
Speed.
final
- switchCameraIcon → IconData
-
Switch camera icon.
final
- tapToFocus → bool
-
Tap on the preview to focus there.
final
- torchEnabled → bool
-
Starts with the flashlight on.
final
- torchOffIcon → IconData
-
Icon when the torch is off.
final
- torchOnIcon → IconData
-
Icon when the torch is on.
final
- tryInvert → bool
-
Also try the inverted image, for light-on-dark symbols.
final
- useAppLifecycleState → bool
-
Pauses the camera when the app goes to the background.
final
Methods
-
alignAtBottomCenter(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the bottom center. -
alignAtBottomLeft(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the bottom left. -
alignAtBottomRight(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the bottom right. -
alignAtCenter(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Centered. -
alignAtCenterLeft(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the center left. -
alignAtCenterRight(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the center right. -
alignAtLERP(
Alignment a, Alignment b, double t, {Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned betweenaandbatt(0 = a, 1 = b). -
alignAtTopCenter(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the top center. -
alignAtTopLeft(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the top left. -
alignAtTopRight(
{Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned to the top right. -
alignXY(
double x, double y, {Key? key, double? heightFactor, double? widthFactor}) → Align -
Available on Widget, provided by the WidgetsExtension extension
Aligned at x, y from -1 to 1.child.alignXY(0, -0.5) -
card(
{Color? backgroundColor, double? elevation, EdgeInsetsGeometry? margin}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Material Card around it.child.card(elevation: 2) -
center(
) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Centered in the available space.child.center() -
chip(
{required Color backgroundColor, double? width, double? height, Alignment? alignment, double borderWidth = 1, double radius = 12, Color borderColor = Colors.transparent, EdgeInsets padding = const EdgeInsets.symmetric(horizontal: 8, vertical: 6), EdgeInsetsGeometry? margin, BoxConstraints? constraints}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Pill-shaped colored box, e.g. for tags.Text("New").chip(backgroundColor: Colors.green.shade100) -
clipCircle(
) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Clips to a circle.avatar.clipCircle() -
clipRadius(
double radius) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Rounds the corners by clipping.image.clipRadius(12) -
container(
{double? width, double? height, Alignment? alignment, Color? backgroundColor, double borderWidth = 1, double radius = 1, Color borderColor = Colors.transparent, EdgeInsetsGeometry? padding, EdgeInsetsGeometry? margin, BoxConstraints? constraints}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Box with background, border and rounded corners.child.container(backgroundColor: Colors.white, radius: 12) -
createElement(
) → StatefulElement -
Creates a StatefulElement to manage this widget's location in the tree.
inherited
-
createState(
) → State< UScanner> -
Creates the mutable state for this widget at a given location in the tree.
override
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children.
inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
Add additional properties associated with the node.
inherited
-
disabled(
bool disabled, {double opacity = 0.5}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Greys out and blocks taps whendisabled.form.disabled(isSaving) -
expanded(
{int flex = 1}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Takes the remaining space in a Row/Column.child.expanded() -
fadeSlideIn(
{int milliseconds = 1000, double offset = 24}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Fades and slides up once when first shown.card.fadeSlideIn() -
fit(
{Alignment alignment = Alignment.center}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Shrinks to fit the space (never grows).Text(long).fit() -
flexible(
{int flex = 1}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Can shrink in a Row/Column but does not have to fill.child.flexible() -
form(
GlobalKey< FormState> key) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Wraps in a Form withkey.column.form(formKey) -
hero(
Object tag) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Hero animation between pages with the sametag.image.hero("product-$id") -
ltr(
) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Forces left-to-right (numbers, phone numbers, code).Text(phone).ltr() -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
onDoubleTap(
GestureTapCallback? onPressed) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Double tap.image.onDoubleTap(like) -
onLongPress(
GestureTapCallback? onPressed) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Long press.child.onLongPress(showOptions) -
onPress(
VoidCallback onTap, {double pressedScale = 0.9, Duration duration = const Duration(milliseconds: 120)}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Tap with a press-down shrink animation.card.onPress(open) -
onTap(
GestureTapCallback? onPressed) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Tap without ripple.child.onTap(open) -
onTapInk(
GestureTapCallback? onPressed) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Tap with a Material ripple (needs a Material ancestor).tile.onTapInk(open) -
opacity(
double opacity) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Makes it see-through (0 = invisible, 1 = solid).child.opacity(0.5) -
pAll(
double padding) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Same padding on every side.child.pAll(16) -
pLTRB(
double left, double top, double right, double bottom) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Padding left, top, right, bottom.child.pLTRB(8, 4, 8, 4) -
pOnly(
{double left = 0.0, double top = 0.0, double right = 0.0, double bottom = 0.0}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Padding on chosen sides.child.pOnly(top: 8) -
position(
{double? left, double? top, double? right, double? bottom, double? width, double? height}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Positioned inside a Stack.badge.position(top: 0, right: 0) -
pSymmetric(
{double horizontal = 0.0, double vertical = 0.0}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Horizontal and/or vertical padding.child.pSymmetric(horizontal: 16) -
rotate(
double scale) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Rotates byscaleradians.arrow.rotate(pi / 2) -
rtl(
) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Forces right-to-left.child.rtl() -
safeArea(
) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Keeps it out of the notch and system bars.body.safeArea() -
scale(
double scale) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Scales the paint (layout size unchanged).icon.scale(1.5) -
scrollable(
{Axis scrollDirection = Axis.vertical}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Makes it scroll when it does not fit.column.scrollable() -
showMenus(
List< PopupMenuEntry< items) → Widgetint> > -
Available on Widget, provided by the WidgetsExtension extension
Shows a popup menu where the user taps; items return their int value.child.showMenus([PopupMenuItem(value: 1, child: Text("Edit"))]) -
sized(
{double? width, double? height}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Fixed width and/or height.logo.sized(width: 48, height: 48) -
skeleton(
bool loading) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Draws a shimmering loading placeholder in its shape whileloading.Text("Name").skeleton(isLoading) -
sliver(
) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Lets a normal widget sit inside a CustomScrollView.header.sliver() -
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
tooltip(
String message) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Showsmessageon long press / mouse hover.icon.tooltip("Delete") -
toString(
{DiagnosticLevel minLevel = DiagnosticLevel.info}) → String -
A string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String -
Returns a string representation of this node and its descendants.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the object.
inherited
-
toStringShort(
) → String -
A short, textual description of this widget.
inherited
-
translate(
Offset offset) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Moves the paint byoffset(layout unchanged).child.translate(const Offset(0, -4)) -
visible(
bool visible, {bool maintainSize = false}) → Widget -
Available on Widget, provided by the WidgetsExtension extension
Shows it only whenvisible; withmaintainSizeit keeps its space.saveButton.visible(isDirty)
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited