Highly configurable component imitating native bottom sheet behavior, with fully native 60 FPS animations!
Built from scratch with react-native-interactable-reanimated and react-native-reanimated.
Usable with Expo with no extra native dependencies!
Open a Terminal in the project root and run:
yarn add react-native-bottomsheet-reanimated react-native-interactable-reanimated
or if you use npm
:
npm install react-native-bottomsheet-reanimated
If you are using Expo, you are done.
If you don't use Expo, install and link react-native-gesture-handler and react-native-reanimated.
import BottomSheet from 'react-native-bottomsheet-reanimated';
class Example extends React.Component {
render() {
return (
<View style={styles.container}>
<BottomSheet
keyboardAware
bottomSheerColor="#FFFFFF"
ref="BottomSheet"
initialPosition={'50%'} //200, 300
snapPoints={['50%', '100%']}
isBackDrop={true}
isBackDropDismissByPress={true}
isRoundBorderWithTipHeader={true}
// backDropColor="red"
// isModal
// containerStyle={{backgroundColor:"red"}}
// tipStyle={{backgroundColor:"red"}}
// headerStyle={{backgroundColor:"red"}}
// bodyStyle={{backgroundColor:"red",flex:1}}
header={
<View>
<Text style={styles.text}>Header</Text>
</View>
}
body={
<View style={styles.body}>
<Text style={styles.text}>Body</Text>
</View>
}
/>
</View>
);
}
}
name | required | default | description |
---|---|---|---|
keyboardAware | no | false |
true will avoid current snap when keyboard will open. |
overDrag | no | true |
false will disable overdrag of last snap, false will also disable bounce' and isModal`. |
keyboardAwareExtraSnapHeight | no | 0 | when keyboardAware=true and this is for adding extra space in snap when keyboard open |
keyboardAwareDrag | no | false |
when keyboardAware=true and this is used for enable or disable drag when keyboard open |
onChangeKeyboardAwareSnap | no | when keyboardAware=true then it give keyboard awareview snap. onChangeKeyboardAwareSnap: (previousSnap: number,nextSnap: number,keyboardHeight: number) => void; |
|
snapPoints | yes | E.g. [300, 200, 0] . Points for snapping of bottom sheet coomponent. They define distance from bottom of the screen. Might be number or percent (as string e.g. '20%' ) for points or percents of screen height from bottom. Note: Array values must be in descending order. |
|
initialPosition | no | 0 | Determines initial position point of bottom sheet. The value outside of snap points. |
body | no | Method for rendering scrollable content of bottom sheet. | |
header | no | Method for rendering non-scrollable header of bottom sheet. | |
isBackDrop | no | false |
for show backdrop behind the bottom sheet. |
isBackDropDismissByPress | no | false |
enable to move bottomsheet to first snappoint by pressing backdrop. |
isRoundBorderWithTipHeader | no | false |
give round with tip header style to bottomsheet. |
isModal | no | false |
to make bottom sheet like modal. |
bounce | no | 0.5 | for increase or decrease bounce effect |
isAnimatedYFromParent | no | If true then give animated value to animatedValueY props. |
|
animatedValueY | no | If isAnimatedYFromParent will be true then it will give animtedY value to animatedValueY props. |
|
bottomSheerColor | no | #ffffff |
for background color of bottom sheet. |
tipStyle | no | for change style of tip. it is dependted on isRoundBorderWithTipHeader . |
|
headerStyle | no | for change style of header. | |
bodyStyle | no | for change style of body. | |
dragEnabled | no | true | for enable/disable drag |
tipHeaderRadius | no | 12 | for tip header border radius |
onClose | no | Method call when bottomsheet close | |
containerStyle | no | for change style of container | |
bodyContainerStyle | no | for change style of body container | |
onChangeSnap | no | Method call when change any snap |
Imperative method on for snapping to snap point in given index. E.g.
// Snap to the snap point at index 0 (e.g. 450 in [450, 300, 0])
this.refs.BottomSheet.current.snapTo(0);
Here this.refs.BottomSheet
refers to the ref
passed to the BottomSheet
component.
More complex examples can be found in the Example
folder. To view the examples in the Expo app, open a Terminal and run:
yarn
cd Example
yarn
expo start
Thanks goes to these wonderful people (emoji key):
Numan 🚇 💻 |