RefreshTrigger class
A widget that provides pull-to-refresh functionality.
The RefreshTrigger wraps a scrollable widget and provides pull-to-refresh functionality. When the user pulls the content beyond the minExtent, the onRefresh callback is triggered.
You can customize the appearance and behavior using RefreshTriggerTheme:
ComponentTheme(
data: RefreshTriggerTheme(
minExtent: 100.0,
maxExtent: 200.0,
curve: Curves.bounceOut,
),
child: RefreshTrigger(...),
)
Pull-to-refresh gesture handler with customizable visual indicators.
Wraps scrollable content to provide pull-to-refresh functionality similar to native mobile applications. Supports both vertical and horizontal refresh gestures with fully customizable visual indicators and animation behavior.
Key Features:
- Pull Gesture Detection: Recognizes pull gestures beyond scroll boundaries
- Visual Feedback: Customizable refresh indicators with progress animation
- Flexible Direction: Supports vertical and horizontal refresh directions
- Reverse Mode: Can trigger from opposite direction (e.g., bottom-up)
- Theme Integration: Full theme support with customizable appearance
- Async Support: Handles async refresh operations with loading states
- Physics Integration: Works with any ScrollPhysics implementation
Operation Flow:
- User pulls scrollable content beyond normal bounds
- Visual indicator appears and updates based on pull distance
- When minimum threshold reached, indicator shows "ready to refresh" state
- On release, onRefresh callback is triggered
- Loading indicator shows during async refresh operation
- Completion animation plays when refresh finishes
- Content returns to normal scroll position
The component integrates seamlessly with ListView, GridView, CustomScrollView, and other scrollable widgets without requiring changes to existing scroll behavior.
Example:
RefreshTrigger(
minExtent: 80.0,
maxExtent: 150.0,
onRefresh: () async {
await Future.delayed(Duration(seconds: 2));
// Refresh data here
},
child: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) => ListTile(
title: Text(items[index]),
),
),
)
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatefulWidget
- RefreshTrigger
- Available extensions
Constructors
- RefreshTrigger.new({Key? key, double? minExtent, double? maxExtent, FutureVoidCallback? onRefresh, Axis direction = Axis.vertical, bool reverse = false, RefreshIndicatorBuilder? indicatorBuilder, Curve? curve, Duration? completeDuration, required Widget child})
-
Creates a RefreshTrigger with pull-to-refresh functionality.
const
Properties
- asBuilder → NeverWidgetBuilder
-
Available on Widget, provided by the WidgetExtension extension
no setter - asSliver → Widget
-
Available on Widget, provided by the XWidgetArcane extension
no setter - base → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - black → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - blockQuote → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - blurIn → Widget
-
Available on Widget, provided by the XWidgetEffect extension
no setter - bold → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - centered → Widget
-
Available on Widget, provided by the XWidget extension
no setter - child → Widget
-
final
- completeDuration → Duration?
-
final
- curve → Curve?
-
final
- direction → Axis
-
final
- ellipsis → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - expand → Widget
-
Available on Widget, provided by the XWidget extension
no setter - extraBold → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - extraLight → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - firstP → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - flexible → Widget
-
Available on Widget, provided by the XWidget extension
no setter - foreground → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - h1 → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - h2 → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - h3 → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - h4 → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - hashCode → int
-
The hash code for this object.
no setterinherited
- ih → Widget
-
Available on Widget, provided by the XWidgetArcane extension
no setter - indicatorBuilder → RefreshIndicatorBuilder?
-
final
- inlineCode → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - intrinsicHeight → Widget
-
Available on Widget, provided by the XWidget extension
no setter - intrinsicSize → Widget
-
Available on Widget, provided by the XWidget extension
no setter - intrinsicWidth → Widget
-
Available on Widget, provided by the XWidget extension
no setter - italic → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - iw → Widget
-
Available on Widget, provided by the XWidgetArcane extension
no setter - key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - lead → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - li → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - light → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - maxExtent → double?
-
final
- medium → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - minExtent → double?
-
final
- modify → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - mono → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - muted → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - normal → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - onRefresh → FutureVoidCallback?
-
final
- p → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - primaryForeground → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - reverse → bool
-
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- safeArea → Widget
-
Available on Widget, provided by the XWidget extension
no setter - sans → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - scrollable → Widget
-
Available on Widget, provided by the XWidget extension
no setter - scrollableHorizontal → Widget
-
Available on Widget, provided by the XWidget extension
no setter - secondaryForeground → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - semiBold → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - singleLine → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - small → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textCenter → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textEnd → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textJustify → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textLarge → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textLeft → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textMuted → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textRight → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textSmall → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - textStart → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - thin → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - underline → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x2Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x3Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x4Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x5Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x6Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x7Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x8Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - x9Large → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - xLarge → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter - xSmall → TextModifier
-
Available on Widget, provided by the TextExtension extension
no setter
Methods
-
animate(
{Key? key, List< Effect> ? effects, AnimateCallback? onInit, AnimateCallback? onPlay, AnimateCallback? onComplete, bool? autoPlay, Duration? delay, AnimationController? controller, Adapter? adapter, double? target, double? value}) → Animate -
Available on Widget, provided by the AnimateWidgetExtensions extension
Wraps the target Widget in an Animate instance, and returns the instance for chaining calls. Ex.myWidget.animate()
is equivalent toAnimate(child: myWidget)
. -
asSkeleton(
{bool enabled = true, bool leaf = false, Widget? replacement, bool unite = false, AsyncSnapshot? snapshot}) → Widget -
Available on Widget, provided by the SkeletonExtension extension
Converts the widget to a skeleton with advanced configuration options. -
asSkeletonSliver(
{bool enabled = true}) → Widget -
Available on Widget, provided by the SkeletonExtension extension
Converts the widget to a skeleton suitable for sliver layouts. -
ast(
int ml) → Widget -
center(
{Key? key}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
clip(
{Clip clipBehavior = Clip.hardEdge}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
clipOval(
{Clip clipBehavior = Clip.antiAlias}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
clipPath(
{Clip clipBehavior = Clip.antiAlias, required CustomClipper< Path> clipper}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
clipRRect(
{BorderRadiusGeometry borderRadius = BorderRadius.zero, Clip clipBehavior = Clip.antiAlias}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
constrained(
{double? minWidth, double? maxWidth, double? minHeight, double? maxHeight, double? width, double? height}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
createElement(
) → StatefulElement -
Creates a StatefulElement to manage this widget's location in the tree.
inherited
-
createState(
) → State< RefreshTrigger> -
Creates the mutable state for this widget at a given location in the tree.
override
-
debugContainer(
[Color color = Colors.red]) → Widget -
Available on Widget, provided by the DebugContainer extension
-
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
-
excludeSkeleton(
{bool exclude = true}) → Widget -
Available on Widget, provided by the SkeletonExtension extension
Controls whether the widget should be preserved in skeleton mode. -
expanded(
{int flex = 1}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
iconDestructiveForeground(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconLarge(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconMedium(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconMutedForeground(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconPrimary(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconPrimaryForeground(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconSecondary(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconSecondaryForeground(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconSmall(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconX2Large(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconX2Small(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconX3Large(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconX3Small(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconX4Large(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconX4Small(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconXLarge(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
iconXSmall(
) → Widget -
Available on Widget, provided by the IconExtension extension
-
ignoreSkeleton(
) → Widget -
Available on Widget, provided by the SkeletonExtension extension
Excludes the widget from skeleton effects in its parent skeleton context. -
intrinsic(
{double? stepWidth, double? stepHeight}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
intrinsicHeight(
) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
intrinsicWidth(
{double? stepWidth, double? stepHeight}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
isSliver(
BuildContext context) → bool -
Available on Widget, provided by the XSliverWidget extension
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
onDoublePressed(
VoidCallback action, {HitTestBehavior? behavior, Set< PointerDeviceKind> ? supportedDevices}) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for double press/tap gestures to this widget in Arcane UI. -
onHover(
void action(bool hovering)) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for hover events to this widget in Arcane UI. -
onLongPressed(
VoidCallback action, {HitTestBehavior? behavior, Set< PointerDeviceKind> ? supportedDevices}) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for long press gestures with the primary button to this widget in Arcane UI. -
onLongSecondaryPressed(
VoidCallback action, {HitTestBehavior? behavior, Set< PointerDeviceKind> ? supportedDevices}) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for long press gestures with the secondary button to this widget in Arcane UI. -
onLongTertiaryPressed(
VoidCallback action, {HitTestBehavior? behavior, Set< PointerDeviceKind> ? supportedDevices}) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for long press gestures with the tertiary button to this widget in Arcane UI. -
onPressed(
VoidCallback action, {HitTestBehavior? behavior, Set< PointerDeviceKind> ? supportedDevices}) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for primary press/tap gestures to this widget in Arcane UI. -
onSecondaryPressed(
VoidCallback action, {HitTestBehavior? behavior, Set< PointerDeviceKind> ? supportedDevices}) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for secondary press gestures (right-click) to this widget in Arcane UI. -
onTertiaryPressed(
VoidCallback action, {HitTestBehavior? behavior, Set< PointerDeviceKind> ? supportedDevices}) → Widget -
Available on Widget, provided by the XOnGestureWidget extension
Adds a handler for tertiary press gestures (middle-click) to this widget in Arcane UI. -
pad(
double all) → Widget -
padBottom(
double value) → Widget -
padBy(
{double? left, double? top, double? right, double? bottom, double? horizontal, double? vertical}) → Widget -
Available on Widget, provided by the XWidgetArcane extension
-
padHorizontal(
double value) → Widget -
Available on Widget, provided by the XWidgetArcane extension
-
padLeft(
double value) → Widget -
padOnly(
{double left = 0, double top = 0, double right = 0, double bottom = 0}) → Widget -
padRight(
double value) → Widget -
padSliverBy(
{double? left, double? top, double? right, double? bottom, double? horizontal, double? vertical}) → Widget -
Available on Widget, provided by the XWidgetArcane extension
-
padSliverHorizontal(
double value) → Widget -
Available on Widget, provided by the XWidgetArcane extension
-
padTop(
double value) → Widget -
positioned(
{Key? key, double? left, double? top, double? right, double? bottom}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
shadeEdge(
double radius) → Widget -
Available on Widget, provided by the XWidgetEdge extension
-
shadeFrost(
double value) → Widget -
Available on Widget, provided by the XWidgetFrost extension
-
shadeInvert(
) → Widget -
Available on Widget, provided by the XWidgetInvert extension
-
shadePixelate(
double radius) → Widget -
Available on Widget, provided by the XWidgetPixelate extension
-
shadePixelateBlur(
{int samples = 4, double pixelSize = 8, double radius = 2}) → Widget -
Available on Widget, provided by the XWidgetPixelateBlur extension
-
shadeRGB(
{double radius = 5, double spin = 1}) → Widget -
Available on Widget, provided by the XWidgetRGB extension
-
shadeWarp(
{double amplitude = 1, double frequency = 1, double z = 1, int octaves = 2}) → Widget -
Available on Widget, provided by the XWidgetWarp extension
-
shadeWarpAnimation(
{double amplitude = 1, double frequency = 1, double z = 1, double zSpeed = 1, int octaves = 2}) → Widget -
Available on Widget, provided by the XWidgetWarp extension
-
shimmer(
{bool loading = true}) → Widget -
Available on Widget, provided by the XWidgetArcane extension
-
sized(
{double? width, double? height}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
sized(
{double? width, double? height}) → Widget -
then(
InlineSpan span) → Widget -
Available on Widget, provided by the TextExtension extension
-
thenButton(
{required VoidCallback onPressed, required Widget child}) → Widget -
Available on Widget, provided by the TextExtension extension
-
thenInlineCode(
String text) → Widget -
Available on Widget, provided by the TextExtension extension
-
thenText(
String text) → Widget -
Available on Widget, provided by the TextExtension extension
-
toBox(
BuildContext context, {bool softWarn = true}) → Widget -
Available on Widget, provided by the XSliverWidget extension
-
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
toSliver(
BuildContext context, {bool fillRemaining = false, bool softWarn = true}) → Widget -
Available on Widget, provided by the XSliverWidget extension
-
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
-
transform(
{Key? key, required Matrix4 transform}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
withAlign(
AlignmentGeometry alignment) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
withMargin(
{double? top, double? bottom, double? left, double? right, double? horizontal, double? vertical, double? all}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
withOpacity(
double opacity) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
withPadding(
{double? top, double? bottom, double? left, double? right, double? horizontal, double? vertical, double? all, EdgeInsetsGeometry? padding}) → Widget -
Available on Widget, provided by the WidgetExtension extension
-
withTooltip(
String tooltip) → Widget -
Available on Widget, provided by the XWidgetArcane extension
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
defaultIndicatorBuilder(
BuildContext context, RefreshTriggerStage stage) → Widget