npm install react-native-actions-sheet --save
OR
yarn add react-native-actions-sheet
Create your ActionSheet component and register it with a unique id. Remember that you do not need to render the ActionSheet in any components.
import React from "react";
import ActionSheet, { SheetManager,SheetProps,registerSheet } from "react-native-actions-sheet";
function MySheet(props:SheetProps) {
return <ActionSheet id={props.sheetId}>
<View>
<Text>Hello World</Text>
</View>
</ActionSheet>;
}
// Register your Sheet component.
registerSheet('mysheet', MySheet);
export default MySheet;
Create a sheets.tsx
or sheets.js
file.
// Import all the sheets here as follows
import "mysheet.tsx"
export {};
In App.js
import sheets.tsx
and wrap your app in SheetProvider
.
import { SheetProvider } from "react-native-actions-sheet";
import "sheets.tsx"; // here
function App() {
return <SheetProvider>
{
// your app components
}
</SheetProvider>;
}
Now you can open the ActionSheet from anywhere in the app.
SheetManager.show("mysheet");
Want to pass some data on opening the sheet or update the state?
SheetManager.show("mysheet",{value:"data"});
<ActionSheet
onBeforeShow={(data) => {
setData(data);
}}
id="helloworld_sheet">
Hiding the sheet is easy. Enable gestures or do the following.
await SheetManager.hide("mysheet");
Close all opened ActionSheets
SheetManager.hideAll();
You can also show the sheet without SheetProvider.
<ActionSheet id="mysheet">
<View>
<Text>Hello World</Text>
</View>
</ActionSheet>;
And then show it;
SheetManager.show("mysheet");
- Cross Platform (iOS and Android)
- Native Animations & Performance
- Identical Working on Android and iOS
- Control ActionSheet with Gestures
- Raw ActionSheet - You can Add Anything
- Allow ActionSheet to be partially shown when opened
- Support TextInputs
- Cool bounce effect on open.
- Tablets and iPads
- Horizontal Layout
- Nested Scrolling or Scrollable Content.
- Virtualization Support
- Global Sheet Manager
- Proper resizing on Android & iOS on Keyboard show/hide.
Consider supporting with a ⭐️ star on GitHub
If you are using the library in one of your projects, consider supporting with a star. It takes a lot of time and effort to keep this maintained and address issues and bugs. Thank you.
A unique id for the ActionSheet. You must set this if you are using SheetManager
.
Type | Required |
---|---|
id | false |
Assigns a ref to ActionSheet component to use methods.
Type | Required |
---|---|
ref | false |
Test ID for unit testing
Type | Required |
---|---|
string | no |
Set this to false to use a simple View instead of a Modal to show the ActionSheet.
Type | Required |
---|---|
boolean | no |
default:true
Use if you want to show the ActionSheet Partially on Opening. **Requires gestureEnabled=true
**
Type | Required |
---|---|
number | no |
Default: 1
Normally when the ActionSheet is fully opened, a small portion from the bottom is hidden by default. Use this prop if you want the ActionSheet to hover over the bottom of screen and not hide a little behind it.
Type | Required |
---|---|
number | no |
Default: 0
Style the top indicator bar in ActionSheet.
Type | Required |
---|---|
ViewStyle |
no |
Any custom styles for the container.
Type | Required |
---|---|
Object | no |
Delay draw of ActionSheet on open for android.
Type | Required |
---|---|
boolean | no |
Default: false
Delay draw of ActionSheet on open for android time.
Type | Required |
---|---|
number (ms) | no |
Default: 50
Your custom header component. Using this will hide the default indicator.
Type | Required |
---|---|
React. ReactNode | no |
Render a component over the ActionSheet. Useful for rendering Toast components with which user can interact.
Type | Required |
---|---|
React. ReactNode | no |
Keep the header always visible even when gestures are disabled.
Type | Required |
---|---|
boolean | no |
Default: false
Animate the opening and closing of ActionSheet.
Type | Required |
---|---|
boolean | no |
Default: true
Speed of opening animation. Higher means the ActionSheet will open more quickly. Use it in combination with bounciness
prop to have optimize the bounce/spring effect on ActionSheet open.
Type | Required |
---|---|
number | no |
Default: 12
Duration of closing animation.
Type | Required |
---|---|
number | no |
Default: 300
Enables gesture control of ActionSheet
Type | Required |
---|---|
boolean | no |
Default: false
Control closing ActionSheet by touching on backdrop.
Type | Required |
---|---|
boolean | no |
Default: true
Bounces the ActionSheet on open.
Type | Required |
---|---|
boolean | no |
Default: false
How much you want the ActionSheet to bounce when it is opened.
Type | Required |
---|---|
number | no |
Default: 8
When touch ends and user has not moved farther from the set springOffset, the ActionSheet will return to previous position.
Type | Required |
---|---|
number | no |
Default: 50
Add elevation to the ActionSheet container.
Type | Required |
---|---|
number | no |
Default: 0
Color of the gestureEnabled Indicator.
Type | Required |
---|---|
string | no |
Default: "#f0f0f0"
Color of the overlay/backdrop.
Type | Required |
---|---|
string | no |
Default: "black"
Default opacity of the overlay/backdrop.
Type | Required |
---|---|
number 0 - 1 | no |
Default: 0.3
Prevent ActionSheet from closing on gesture or tapping on backdrop. Instead snap it to bottomOffset
location
Type | Required |
---|---|
boolean | no |
Default: true
Snap ActionSheet to this location if closable
is set to false. By default it will snap to the location on first open.
Type | Required |
---|---|
number | no |
Default: 0
Setting the keyboard persistence of the ScrollView
component. Should be one of "never", "always" or "handled"
Type | Required |
---|---|
string | no |
Default: never
Allow to choose will content change position when keyboard is visible. This is enabled by default.
Type | Required |
---|---|
boolean | no |
Default: true
Set how keyboard should behave on tapping the ActionSheet.
Type | Required |
---|---|
"on-drag" "none" "interactive" |
no |
Default : "none"
Determine whether the modal should go under the system statusbar.
Type | Required |
---|---|
boolean | no |
Default: true
Will the ActionSheet close on hardwareBackPress
event.
Type | Required |
---|---|
boolean | no |
Default: true
Allow ActionSheet to draw under the StatusBar. This is enabled by default.
Type | Required |
---|---|
boolean | no |
Default: false
Event called when position of ActionSheet changes.
Type | Required |
---|---|
function | no |
Event called when the ActionSheet closes.
Type | Required |
---|---|
function | no |
An event called when the ActionSheet Opens.
Type | Required |
---|---|
function | no |
Methods require you to set a ref on ActionSheet Component.
If your component includes any child ScrollView/FlatList you must attach this method to all scroll end callbacks.
<ScrollView
ref={scrollViewRef}
nestedScrollEnabled={true}
onMomentumScrollEnd={() =>
actionSheetRef.current?.handleChildScrollEnd()
}
.....
Opens the ActionSheet.
import ActionSheet from "react-native-actions-sheet";
import React, { createRef } from "react";
const actionSheetRef = createRef();
// First create a ref on your <ActionSheet/> Component.
<ActionSheet ref={actionSheetRef} />;
// then later in your function to open the ActionSheet:
actionSheetRef.current?.show();
Closes the ActionSheet.
import ActionSheet from "react-native-actions-sheet";
import React, { createRef } from "react";
const actionSheetRef = createRef();
// First create a ref on your <ActionSheet/> Component.
<ActionSheet ref={actionSheetRef} />;
// then later in your function to open the ActionSheet:
actionSheetRef.current?.hide();
ActionSheet can be opened or closed using its ref.
import ActionSheet from "react-native-actions-sheet";
import React, { createRef } from "react";
const actionSheetRef = createRef();
// First create a ref on your <ActionSheet/> Component.
<ActionSheet ref={actionSheetRef} />;
// then later in your function to open the ActionSheet:
actionSheetRef.current?.setModalVisible();
It's also possible to explicitly either show or hide modal.
import ActionSheet from "react-native-actions-sheet";
import React, { createRef } from "react";
const actionSheetRef = createRef();
// First create a ref on your <ActionSheet/> Component.
<ActionSheet ref={actionSheetRef} />;
// then to show modal use
actionSheetRef.current?.setModalVisible(true);
// and later you may want to hide it using
actionSheetRef.current?.setModalVisible(false);
When the ActionSheet is open, you can progammatically snap it to different offsets.
import ActionSheet from "react-native-actions-sheet";
import React, { createRef } from "react";
const actionSheetRef = createRef();
// First create a ref on your <ActionSheet/> Component.
<ActionSheet ref={actionSheetRef} />;
// snap to this location on screen
actionSheetRef.current?.snapToOffset(200);
actionSheetRef.current?.snapToOffset(150);
actionSheetRef.current?.snapToOffset(300);
Nested scrolling on android is disabled by default. You can enable it as done below.
import ActionSheet from "react-native-actions-sheet";
const App = () => {
const actionSheetRef = useRef();
return (
<ActionSheet ref={actionSheetRef}>
<ScrollView
nestedScrollEnabled={true}
onMomentumScrollEnd={() =>
actionSheetRef.current?.handleChildScrollEnd()
}
/>
</ActionSheet>
);
};
Support it by donating or joining stargazers for this repository. ⭐️ and follow me for my next creations!