Skip to content
TrademarkTrademark
Docs
Components

Scroller

Updated: October 18, 2026
View on GitHub
Soon
Not released yet. The published package does not include this yet, so it will not install today.

Scroller is a ScrollView that takes the Flex props. Layout props such as gap, padding, vertical and safeArea lay out the content, while size props such as flex, height and margins size the scroller itself. It scrolls sideways by default, as the web Scroller does. Use direction="column" for a screen.

A scrolling screen

A "column" scroller fills its screen when you give it flex={1}. safeArea={["bottom"]} adds the home indicator's inset from ThemeProvider's insets to the bottom padding, so the last item clears it. The content grows to at least the screen's height, so vertical="center" centers an empty state.

onRefresh adds pull to refresh, with the spinner in the theme's colours. When onRefresh returns a promise, the spinner shows until it settles. Pass refreshing to drive the spinner yourself.

Differences from the web

  • There are no scroll buttons or edge fades, since a phone scrolls by touch. fadeColor, onItemClick and labels are left out.
  • onRefresh, refreshing and showScrollbar are new. The scroll bar is hidden by default, as on the web.
  • Flex props are split between the scroll view (size, margins, background, border, radius, position) and its content (direction, alignment, gap, padding, safeArea).

API reference

Prop
Type
Default
Description
direction"row" | "column""row"The scroll axis.
onRefresh() => unknownPull to refresh, on a "column" scroller. A returned promise keeps the spinner showing until it settles.
refreshingbooleanShows the refresh spinner, when you drive it yourself.
showScrollbarbooleanfalseShows the scroll bar.
...FlexPropsFlexPropsSpacing, size, surface and position props, as on Flex.
Edit this page on GitHub