UButton class

Button with loading state, icon, sizes, full width, and a built-in "resend in 59s" countdown. UButton(title: "Save", onTap: save, isLoading: saving)

Inheritance
Available extensions

Constructors

UButton({String? title, Key? key, UButtonType type = UButtonType.elevated, UButtonSize size = UButtonSize.medium, VoidCallback? onTap, VoidCallback? onLongPress, Widget? child, Widget? icon, UButtonIconPosition iconPosition = UButtonIconPosition.leading, double iconGap = 8, double? iconSize, bool fullWidth = false, double? width, double? height, double? minWidth, double? maxWidth, double? minHeight, double? maxHeight, TextStyle? textStyle, Color? backgroundColor, Gradient? gradient, Color? foregroundColor, Color? disabledBackgroundColor, Color? disabledForegroundColor, double disabledOpacity = 0.45, double borderRadius = 8, double borderWidth = 1, Color? borderColor, BoxBorder? border, List<BoxShadow>? boxShadow, OutlinedBorder? shape, EdgeInsetsGeometry? padding, double elevation = 2, bool splash = true, Color? splashColor, Color? highlightColor, double? pressedScale, bool isLoading = false, Widget? loadingWidget, Color? loadingColor, double loadingSize = 20, double loadingStrokeWidth = 2, UButtonLoadingPosition loadingPosition = UButtonLoadingPosition.replace, bool enabled = true, String? tooltip, String? semanticLabel, bool autofocus = false, FocusNode? focusNode, bool hapticFeedback = false, int? counter, String? counterDescription = "", dynamic counterOnCounting(int)?, bool? counterResetCounterOnTap, VoidCallback? onCountdownFinish, String counterFormatter(int secondsLeft)?, String? heroTag, EdgeInsetsGeometry? margin, bool visible = true, double? opacity, BoxFit? fit, AlignmentGeometry fitAlignment = Alignment.center, double? scale, double? rotate, Offset? translate, bool center = false, bool safeArea = false, int? expanded, int? flexible, bool positioned = false, double? left, double? top, double? right, double? bottom, double? positionedWidth, double? positionedHeight})
const

Properties

autofocus → bool
Focuses the button on start (keyboard/TV).
final
backgroundColor → Color?
Background color.
final
border → BoxBorder?
Border around it.
final
borderColor → Color?
Border color.
final
borderRadius → double
Corner radius.
final
borderWidth → double
Border thickness.
final
bottom → double?
Distance from the bottom when positioned in a Stack.
final
boxShadow → List<BoxShadow>?
Shadows under it.
final
center → bool
Centers it in the available space.
final
child → Widget?
The widget inside.
final
counter → int?
Seconds of countdown before the button is enabled, e.g. 60 for "resend code". UButton(title: "Resend", counter: 60, onTap: resend)
final
counterDescription → String?
Text after the countdown, e.g. "until resend".
final
counterFormatter → String Function(int secondsLeft)?
Builds the countdown text from seconds left.
final
counterOnCounting → dynamic Function(int)?
Called every second with the seconds left.
final
counterResetCounterOnTap → bool?
Starts the countdown again after each tap.
final
disabledBackgroundColor → Color?
Background while disabled (onTap null or counting down).
final
disabledForegroundColor → Color?
Text/icon color while disabled.
final
disabledOpacity → double
Opacity while disabled.
final
elevation → double
Shadow depth.
final
enabled → bool
False disables interaction and greys it out.
final
expanded → int?
Flex value to fill the remaining space in a Row/Column (null = off).
final
fit → BoxFit?
How the content fits its box (BoxFit).
final
fitAlignment → AlignmentGeometry
Alignment inside the box when it does not fill it.
final
flexible → int?
Flex value to shrink in a Row/Column when space is tight (null = off).
final
focusNode → FocusNode?
Focus node to control keyboard focus.
final
foregroundColor → Color?
Text/icon color.
final
fullWidth → bool
Stretches to the full width.
final
gradient → Gradient?
Background gradient (overrides the color).
final
hapticFeedback → bool
Vibrates lightly on interaction (mobile).
final
hashCode → int
The hash code for this object.
no setterinherited
height → double?
Height in logical pixels (null = size to content).
final
heroTag → String?
Hero tag for a shared-element animation between pages.
final
highlightColor → Color?
Pressed highlight color.
final
icon → Widget?
Icon shown with it.
final
iconGap → double
Gap between icon and title.
final
iconPosition → UButtonIconPosition
Icon before or after the title.
final
iconSize → double?
Icon size.
final
isLoading → bool
Shows a loading state.
final
key → Key?
Controls how one widget replaces another widget in the tree.
finalinherited
left → double?
Distance from the left when positioned in a Stack.
final
loadingColor → Color?
Spinner color.
final
loadingPosition → UButtonLoadingPosition
Where the spinner shows.
final
loadingSize → double
Spinner size.
final
loadingStrokeWidth → double
Spinner line width.
final
loadingWidget → Widget?
Your own loading indicator.
final
margin → EdgeInsetsGeometry?
Space outside, around the widget.
final
maxHeight → double?
Maximum height.
final
maxWidth → double?
Maximum width.
final
minHeight → double?
Minimum height.
final
minWidth → double?
Minimum width.
final
onCountdownFinish → VoidCallback?
Called when the countdown reaches zero.
final
onLongPress → VoidCallback?
Called on long press.
final
onTap → VoidCallback?
Called when tapped.
final
opacity → double?
See-through amount, 0 (invisible) to 1 (solid).
final
padding → EdgeInsetsGeometry?
Space inside, around the content.
final
positioned → bool
Wraps it in a Positioned (use inside a Stack) with top/left/right/bottom.
final
positionedHeight → double?
Height when positioned.
final
positionedWidth → double?
Width when positioned.
final
pressedScale → double?
Scale while pressed, e.g. 0.95 for a subtle shrink.
final
Distance from the right when positioned in a Stack.
final
rotate → double?
Rotation in radians.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
safeArea → bool
Keeps it out of the notch and system bars.
final
scale → double?
Scales the painted widget (1 = normal size).
final
semanticLabel → String?
Label read by screen readers.
final
shape → OutlinedBorder?
Shape of the widget.
final
size → UButtonSize
Size in logical pixels.
final
splash → bool
Shows a Material ripple on tap.
final
splashColor → Color?
Ripple color.
final
textStyle → TextStyle?
Text style.
final
title → String?
Title text.
final
tooltip → String?
Text shown on long press / mouse hover.
final
top → double?
Distance from the top when positioned in a Stack.
final
translate → Offset?
Moves the painted widget by this offset (layout unchanged).
final
type → UButtonType
Style variant.
final
visible → bool
False hides it completely (takes no space).
final
width → double?
Width in logical pixels (null = size to content).
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 between a and b at t (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<UButton>
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 when disabled. 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 with key. column.form(formKey)
hero(Object tag) → Widget

Available on Widget, provided by the WidgetsExtension extension

Hero animation between pages with the same tag. 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 by scale radians. 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<int>> items) → Widget

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 while loading. 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

Shows message on 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 by offset (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 when visible; with maintainSize it keeps its space. saveButton.visible(isDirty)

Operators

operator ==(Object other) → bool
The equality operator.
inherited