Expo App UIExpo App UI
Components

Bottom Sheet

Modal bottom sheet with swipe-to-dismiss, dynamic content height, and animated backdrop.

Installation

npx expo-app-ui add bottom-sheet

Usage

import BottomSheet from "@/components/ui/bottom-sheet";
import { useState } from "react";
import { Text, View } from "react-native";

const [open, setOpen] = useState(false);

<BottomSheet visible={open} onClose={() => setOpen(false)}>
  <View>
    <Text style={{ fontSize: 18, fontWeight: "600" }}>Settings</Text>
    {/* …content */}
  </View>
</BottomSheet>

Props

PropTypeDefaultDescription
visiblebooleanrequiredShow/hide
onClose() => voidrequiredClose handler
childrenReactNoderequiredSheet content
heightnumber | 'auto''auto'Fixed height or content-driven
maxHeightnumber90% of screenCap for auto
backgroundColorstring'#FFFFFF'Sheet bg
backdropColorstring'rgba(0,0,0,0.5)'Backdrop color
borderRadiusnumber20Top corner radius
showHandlebooleantrueRender the drag handle
handleColorstring'#D1D5DB'Drag handle color
enableSwipeDownbooleantrueAllow swipe-to-dismiss
closeOnBackdropbooleantrueTap backdrop to close
closeOnBackPressbooleantrueAndroid back to close

Accessibility

  • accessibilityViewIsModal on the wrapper
  • Backdrop dismiss is announced via the back-press handler

Notes

  • For sheets that need keyboard avoidance during text input, the component dismisses the keyboard on close. If you need keyboard-pushing behavior, wrap your content in KeyboardAvoidingView.
  • For more advanced gestures (snap points, programmatic positioning), consider @gorhom/bottom-sheet. This component intentionally stays minimal.

On this page

Find this useful?

Buy me a coffee