ClassicHeader & ClassicFooter
ClassicHeader and ClassicFooter are the default indicators bundled with smart_refresher. They combine an icon and a status text label, and automatically adapt their spinner to CircularProgressIndicator on Android and CupertinoActivityIndicator on iOS.
Basic Usage
Section titled “Basic Usage”SmartRefresher( controller: _controller, enablePullDown: true, enablePullUp: true, header: const ClassicHeader(), footer: const ClassicFooter(), onRefresh: _onRefresh, onLoading: _onLoading, child: ListView.builder(...),)ClassicHeader Properties
Section titled “ClassicHeader Properties”| Property | Type | Default | Description |
|---|---|---|---|
idleText | String? | "Pull down to refresh" | Text shown when idle. |
releaseText | String? | "Release to refresh" | Text shown when the threshold is crossed. |
refreshingText | String? | "Refreshing..." | Text shown during the active refresh. |
completeText | String? | "Refresh Complete" | Text shown on success. |
failedText | String? | "Refresh Failed" | Text shown on failure. |
idleIcon | Widget? | ↓ arrow icon | Icon for the idle state. |
releaseIcon | Widget? | ↺ refresh icon | Icon when armed. |
refreshingIcon | Widget? | Platform spinner | Icon during refresh. |
completeIcon | Widget? | ✓ check icon | Icon on success. |
failedIcon | Widget? | ⚠ error icon | Icon on failure. |
iconPos | IconPosition | .left | Position of the icon relative to text. |
spacing | double | 16.0 | Gap between the icon and the label text. |
color | Color? | Theme primary | Color for the spinner and default icons. |
arrowColor | Color? | Theme arrow | Color for the directional arrow icons. |
iconColor | Color? | Theme icon | Color for complete/failed icons. |
textStyle | TextStyle? | Theme text | Style for the status label. |
outerBuilder | OuterBuilder? | null | Wraps the entire indicator (e.g., for custom background). |
height | double | 60.0 | Height reserved for the header. |
completeDuration | Duration | 600ms | How long the complete/failed state is visible. |
IconPosition Values
Section titled “IconPosition Values”| Value | Behaviour |
|---|---|
.left | Icon to the left of the text (default). |
.right | Icon to the right of the text. |
.top | Icon above the text. |
.bottom | Icon below the text. |
ClassicFooter Properties
Section titled “ClassicFooter Properties”| Property | Type | Default | Description |
|---|---|---|---|
idleText | String? | "Pull up to load" | Text when the footer is visible but idle. |
canLoadingText | String? | "Release to load" | Text when the user has pulled past the trigger. |
loadingText | String? | "Loading..." | Text during active loading. |
noDataText | String? | "No more data" | Text in the noData state. |
failedText | String? | "Load Failed" | Text when loading fails. |
idleIcon | Widget? | ↑ arrow icon | Icon for the idle state. |
canLoadingIcon | Widget? | ↺ autorenew icon | Icon when armed to load. |
loadingIcon | Widget? | Platform spinner | Icon during loading. |
noMoreIcon | Widget? | null | Optional icon for the noData state. |
failedIcon | Widget? | ⚠ error icon | Icon on failure. |
color | Color? | Theme primary | Color for all default icons and the spinner. |
textStyle | TextStyle? | Theme text | Style for the status text. |
iconPos | IconPosition | .left | Position of the icon relative to text. |
spacing | double | 16.0 | Gap between the icon and the label text. |
outerBuilder | OuterBuilder? | null | Wraps the entire footer indicator. |
height | double | 60.0 | Height reserved for the footer. |
Customisation Examples
Section titled “Customisation Examples”Custom Text Labels
Section titled “Custom Text Labels”ClassicHeader( idleText: 'Swipe down to refresh', releaseText: 'Let go!', refreshingText: 'Hold on...', completeText: 'Done ✓', failedText: 'Something went wrong',)Custom Colors
Section titled “Custom Colors”ClassicHeader( color: Colors.deepPurple, // spinner color arrowColor: Colors.purple, // arrow icon color iconColor: Colors.green, // complete/fail icon color)Custom Icons
Section titled “Custom Icons”ClassicHeader( idleIcon: const Icon(Icons.south, color: Colors.blue), releaseIcon: const Icon(Icons.north, color: Colors.orange), completeIcon: const SizedBox.shrink(), // hide on complete)Custom Background via outerBuilder
Section titled “Custom Background via outerBuilder”ClassicHeader( outerBuilder: (child) => Container( decoration: BoxDecoration( gradient: LinearGradient( colors: [Colors.deepPurple.shade900, Colors.black], ), ), child: child, ),)Localization
Section titled “Localization”ClassicHeader and ClassicFooter both support i18n via RefreshLocalizations. Wrap your app to provide localized strings:
MaterialApp( localizationsDelegates: [ RefreshLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: const [ Locale('en'), Locale('zh'), // ... other supported locales ], ...)Two-Level Support
Section titled “Two-Level Support”ClassicHeader exposes additional properties for two-level refresh:
ClassicHeader( canTwoLevelText: 'Pull further to open', canTwoLevelIcon: const Icon(Icons.open_in_full), twoLevelView: MySecondLevelWidget(), // full-screen widget shown on two-level open)See the Core Architecture page for a full explanation of the two-level refresh state machine.