Imperative Methods
Component Methods
TrueSheet has a couple of core methods that you'll be using most of the time. These methods are asynchronous so you can use async and await on them.
Define the sheet and provide a ref. We will be using the sheet to access these methods.
const sheet = useRef<TrueSheet>(null)
return (
<TrueSheet ref={sheet} detents={['auto', 0.8]}>
<View />
</TrueSheet>
)
present
Present the sheet. Optionally accepts a detent index and animated flag. See detents prop.
| Parameters | Required | Default |
|---|---|---|
index: number | No | 0 |
animated: boolean | No | true |
await sheet.current?.present()
// Present without animation
await sheet.current?.present(0, false)
dismiss
Dismisses the sheet. Optionally accepts an animated flag.
| Parameters | Required | Default |
|---|---|---|
animated: boolean | No | true |
await sheet.current?.dismiss()
// Dismiss without animation
await sheet.current?.dismiss(false)
When called on a sheet that has other sheets presented on top of it, dismiss() will dismiss all sheets above it but the sheet itself will remain presented. This matches iOS's native UIViewController behavior. See Dismissing Stacked Sheets for more details.
resize
Resizes the sheet programmatically by index. The sheet must be presented before calling this method.
| Parameters | Required |
|---|---|
index: number | Yes |
// Resize to 80%
await sheet.current?.resize(1)
Global Methods
You can also call the above methods statically without having access to a sheet's ref. This is particularly useful when you want to present a sheet from anywhere.
The API is similar to the component methods except for the required name prop. See this guide for example.
In the example below, we provide "my-sheet" as the name of our sheet.
const sheet = useRef<TrueSheet>(null)
return (
<TrueSheet name="my-sheet" detents={['auto', 0.8]}>
<View />
</TrueSheet>
)
You can then use these methods globally.
await TrueSheet.present('my-sheet')
// Present without animation
await TrueSheet.present('my-sheet', 0, false)
await TrueSheet.dismiss('my-sheet')
// Dismiss without animation
await TrueSheet.dismiss('my-sheet', false)
// Resize to 80%
await TrueSheet.resize('my-sheet', 0.8)
dismissAll
Dismisses all presented sheets in the current stack. This is useful when you need to close all sheets at once, for example when navigating away or resetting the UI state.
| Parameters | Required | Default |
|---|---|---|
animated: boolean | No | true |
await TrueSheet.dismissAll()
// Dismiss all without animation
await TrueSheet.dismissAll(false)
This only dismisses sheets in the current presentation context. Sheets presented behind a modal (e.g., React Navigation modal or React Native Modal) will not be affected.