Button
The Button component is a versatile, animated pressable element with multiple variants, sizes, and states.Import
Basic Usage
Props
The visual style variant of the button.
primary: Solid background with white textoutline: Transparent background with colored borderlight: Light colored backgroundghost: Transparent with subtle textservice: Card style with border
The text to display in the button.
Icon element to display before the title.
The color scheme for the button. Options:
primary: Theme primary color (#369a82)text: Theme text colorlight: White (#FFFFFF)danger: Red (#DC1400)cherry: Pink (#D60046)black: Black (#000000)card: Theme card colorblue: Blue (#0059DD)orange: Orange (#C94F1A)
The size of the button.
small: Height 40px, padding 12pxmedium: Height 50px, padding 18pxlarge: Height 60px, padding 24px
If true, button width adjusts to content instead of full width.
Shows a loading spinner inside the button.
Disables the button and reduces opacity.
Horizontal alignment of button content.
Disables layout transition animations.
Callback fired when the button is pressed.
Variants
Primary
Solid background button with white text. The default and most prominent style.Outline
Transparent background with colored border and text.Light
Light colored background (30% opacity) with colored text.Ghost
Minimal transparent button with subtle text.Service
Card-style button with border, used for service integrations.With Icons
Add icons using Lucide React Native or other icon libraries:Loading State
Display a loading spinner while an async operation is in progress:Sizes
Inline Buttons
By default, buttons take full width. Useinline to size to content:
Custom Content
Pass custom children for advanced layouts:Disabled State
Animations
The Button component includes built-in press animations:- Press In: Scales to 0.97 and reduces opacity to 0.7
- Press Out: Springs back to normal scale with smooth easing
- Haptic Feedback: Soft haptic on press (iOS)
Disable Animations
Alignment
Control horizontal alignment of button content:Theming
The Button component automatically adapts to your React Navigation theme:Accessibility
The Button component is built on React Native’s Pressable and inherits all accessibility props.
Performance
- Button is wrapped in
React.memofor optimal re-render performance - Animations use Reanimated’s worklet-based animations (runs on UI thread)
- Press handlers are memoized with
useCallback - All style calculations are memoized with
useMemo

