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
-
- Object
- DiagnosticableTree
- Widget
- StatefulWidget
- UButton
- 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
- right → double?
-
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 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< 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 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